前面的 WordPress 主題後台製作教程一、二、三分別介紹了在 WordPresss 後台添加外觀子菜單頁面、頂級菜單頁面和子菜單頁面。其中有一些注意事項這裏來總結一下。

一、動作鈎子

我們在添加後台設置頁面的時候一般使用瞭如下代碼:

  1. add_action('admin_menu', 'test_function');  

一般都是使用 admin_menu 鈎子來添加頁面的,官網文檔中也有提示:

NOTE: If you're running into the »You do not have sufficient permissions to access this page.« message in a `wp_die()` screen, then you've hooked too early. The hook, you should use is `admin_menu`.

大意是説:如果你碰到了提示你説: 你沒有足夠的權限訪問這個頁面 (You do not have sufficient permissions to access this page),很有可能你使用的鈎子太早觸發了,你應該使用 『admin_menu』 這個鈎子。

二、權限

我們添加設置頁面的函數中都有一個參數:$capability,這個參數為用户訪問這個菜單頁面需要的權限。在函數 add 的參數介紹中有建議:

 User levels are deprecated and should not be used here!

在 WordPress 中也將權限分成了很多級別,也就是 user levels,這裏建議你使用 capability,WordPress 官方網站轉麼有一個介紹頁面. 如下:

所以建議使用這個頁面提到的內容,不過我看很多插件和主題的作者並沒有這樣做,比如像國內博主 「萬戈」 的一篇文章中,這個參數是:basename(__FILE__),還有人這個參數寫的是:administrator,但是這準確來説不是權限,而是角色,還有在國外收費主題中看到這個參數使用了數字,也就是 user levels 。他們都這樣用,所以我也只是敢建議了。。。

三、相關函數

第一篇教程中我們在後台的 「外觀」 菜單項裏面添加了一個子菜單項,使用的函數是:add_theme_page(), 在教程 (三) 中又介紹了一個添加子菜單項的函數 add_submenu_page(),我們可以用 add_submenu_page() 來代替 add_theme_page(),add_theme_page 只是 WordPress 提供的一個更方便一點的函數,跟這個函數一樣的函數還有:

  1. For Dashboardadd_submenu_page( 'index.php', ... ); Also see add_dashboard_page()
  2. For Postsadd_submenu_page( 'edit.php', ... ); Also see Also see add_posts_page()
  3. For Mediaadd_submenu_page( 'upload.php', ... ); Also see add_media_page()
  4. For Linksadd_submenu_page( 'link-manager.php', ... ); Also see add_links_page()
  5. For Pagesadd_submenu_page( 'edit.php?post_type=page', ... ); Also see add_pages_page()
  6. For Commentsadd_submenu_page( 'edit-comments.php', ... ); Also see add_comments_page()
  7. For Custom Post Typesadd_submenu_page( 'edit.php?post_type=your_post_type', ... );
  8. For Appearanceadd_submenu_page( 'themes.php', ... ); Also see add_theme_page()
  9. For Pluginsadd_submenu_page( 'plugins.php', ... ); Also see add_plugins_page()
  10. For Usersadd_submenu_page( 'users.php', ... ); Also see add_users_page()
  11. For Toolsadd_submenu_page( 'tools.php', ... ); Also see add_management_page()
  12. For Settingsadd_submenu_page( 'options-general.php', ... ); Also see add_options_page()

上面 12 個除去第 7 個 custom post type,就是正常默認情況下,WordPress 的 11 個頂級菜單項了。比如第一個 For Dashboardadd_submenu_page( 'index.php', ... ); Also see add_dashboard_page() 。

往儀表盤添加一個子菜單項,可以使用 add_submenu_page(『index.php』,...) 這個函數,也可以直接使用 add_dashboard_page 函數。