WordPress 自定義後台選單

先介紹兩個全域變數

  • global $menu  < 主選單
  • global $submenu  < 子選單

自定義後台選單就靠這兩個變數,透過admin_menu這個hook把值print出來。

/*
    V123 DEV
    https://v123.tw
*/
function V123DEV_admin_menu_change() {
    global $menu;
    global $submenu;
    print_r($menu);
    print_r($submenu);
}
add_action( 'admin_menu', 'V123DEV_admin_menu_change');

$menu print 出來主選單資料結構大概長這樣

/*
    V123 DEV
    https://v123.tw
*/
Array
(
    [2] => Array
        (
            [0] => 控制台
            [1] => read
            [2] => index.php
            [3] => 
            [4] => menu-top menu-top-first menu-icon-dashboard
            [5] => menu-dashboard
            [6] => dashicons-dashboard
        )

    [4] => Array
        (
            [0] => 
            [1] => read
            [2] => separator1
            [3] => 
            [4] => wp-menu-separator
        )

    [10] => Array
        (
            [0] => 媒體
            [1] => upload_files
            [2] => upload.php
            [3] => 
            [4] => menu-top menu-icon-media
            [5] => menu-media
            [6] => dashicons-admin-media
        )
)

$submenu print 出來主選單資料結構大概長這樣

/*
    V123 DEV
    https://v123.tw
*/
Array
(
    [index.php] => Array
        (
            [0] => Array
                (
                    [0] => 首頁
                    [1] => read
                    [2] => index.php
                )

            [10] => Array
                (
                    [0] => 更新 <span class='update-plugins count-0'><span class='update-count'>0</span></span>
                    [1] => update_core
                    [2] => update-core.php
                )

        )

    [upload.php] => Array
        (
            [5] => Array
                (
                    [0] => 媒體庫
                    [1] => upload_files
                    [2] => upload.php
                )

            [10] => Array
                (
                    [0] => 新增檔案
                    [1] => upload_files
                    [2] => media-new.php
                )

            [15] => Array
                (
                    [0] => Media Categories
                    [1] => manage_categories
                    [2] => edit-tags.php?taxonomy=media_category&amp;post_type=attachment
                )

        )

    [edit-comments.php] => Array
        (
            [0] => Array
                (
                    [0] => 全部迴響
                    [1] => edit_posts
                    [2] => edit-comments.php
                )

        )

    [edit.php] => Array
        (
            [5] => Array
                (
                    [0] => 全部文章
                    [1] => edit_posts
                    [2] => edit.php
                )

            [10] => Array
                (
                    [0] => 新增文章
                    [1] => edit_posts
                    [2] => post-new.php
                )

            [15] => Array
                (
                    [0] => 分類
                    [1] => manage_categories
                    [2] => edit-tags.php?taxonomy=category
                )

            [16] => Array
                (
                    [0] => 標籤
                    [1] => manage_post_tags
                    [2] => edit-tags.php?taxonomy=post_tag
                )

        )
)

其實看到這結構,應該不難推敲每個參數的作用是什麼,以下簡單地進行一個修改,就可以把選單的標題改掉了。

/*
    V123 DEV
    https://v123.tw
*/
function wptutsplus_change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'News';
    $submenu['edit.php'][5][0] = 'News Items';
    $submenu['edit.php'][10][0] = 'Add News Item';
}
add_action( 'admin_menu', 'wptutsplus_change_post_menu_label' );

但有時我們可能會有不同角色的使用者,用index的方式修改其實不是很準確,所以下面我們用每個menu的slug來判斷要修改的選單,另外修改他的權限,這種做法無論是什麼角色的使用者,選單都會被套用。

/*
    V123 DEV
    https://v123.tw
*/
function V123DEV_admin_menu_change() {
    global $menu;
    global $submenu;
	
	// 修改選單的名稱及權限
	foreach($menu as $k => $v){
		if(isset($v[5])&&$v[5]=='toplevel_page_uam_user_group'){
			$menu[$k][0]= '訂閱管理';
			$menu[$k][1]= 'read';
		}
	}
	
	// 新增一個子選單
	if(isset($submenu['uam_user_group'])){
		$submenu['uam_user_group'][] = array(
			0 => 'Manage user user groups',
			1 => 'read',
			2 => 'uam_user_group',
			3 => 'Manage user user groups',
		);
	}
}
add_action( 'admin_menu', 'V123DEV_admin_menu_change');

這是一個快速修改選單的方法

參考資料:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料