WordPress插件開(kāi)發(fā)教程手冊(cè) — 管理菜單
本教程詳細(xì)介紹了如何在WordPress插件開(kāi)發(fā)中添加自定義管理菜單,包括頂級(jí)菜單和子菜單的創(chuàng)建方法。通過(guò)代碼示例,展示了如何使用`add_menu_page()`函數(shù)添加頂級(jí)菜單,并提供了最佳實(shí)踐建議,幫助開(kāi)發(fā)者更好地管理插件設(shè)置選項(xiàng)頁(yè)面。
管理菜單是 WordPress 后臺(tái)左側(cè)顯示的后臺(tái)管理功能菜單,可以讓我們?yōu)椴寮蛑黝}添加自定義設(shè)置選項(xiàng)頁(yè)面。
頂級(jí)菜單和子菜單
頂級(jí)菜單在 WordPress 后臺(tái)左側(cè)顯示,可以包含一組子菜單。插件需要添加頂級(jí)菜單還是子菜單,可以根據(jù)最終用戶需求確定。
頂級(jí)菜單
添加一個(gè)頂級(jí)菜單
如果我們需要添加頂級(jí)菜單到 WordPress 后臺(tái),可以使用 add_menu_page() 函數(shù)。
<?php
add_menu_page(
string $page_title,
string $menu_title,
string $capability,
string $menu_slug,
callable $function = '',
string $icon_url = '',
int $position = null
);
示例
比如,我們需要添加一個(gè)名為 “WPOrg” 的頂級(jí)菜單。
第一步,我們需要?jiǎng)?chuàng)建一個(gè)輸出 HTML 的函數(shù),在這個(gè)函數(shù)中,我們會(huì)執(zhí)行必要的安全檢查,并使用 設(shè)置 API 顯示我們注冊(cè)選項(xiàng)。
<?php
function wporg_options_page_html() {
// check user capabilities
if (!current_user_can('manage_options')) {
return;
}
?>
<div class=wrap>
<h1><?= esc_html(get_admin_page_title()); ?></h1>
<form action=options.php method=post>
<?php
// output security fields for the registered setting wporg_options
settings_fields('wporg_options');
// output setting sections and their fields
// (sections are registered for wporg, each field is registered to a specific section)
do_settings_sections('wporg');
// output save settings button
submit_button('Save Settings');
?>
</form>
</div>
<?php
}
第二步,把上面生成 HTML 的函數(shù)掛載到 admin_menu Action 鉤子上面。
<?php
function wporg_options_page() {
add_menu_page(
'WPOrg',
'WPOrg Options',
'manage_options',
'wporg',
'wporg_options_page_html',
plugin_dir_url(__FILE__) . 'images/icon_wporg.png',
20
);
}
add_action('admin_menu', 'wporg_options_page');
使用 PHP 創(chuàng)建 HTML
可移植代碼的最佳實(shí)踐是創(chuàng)建一個(gè)需要包含文件的回調(diào)函數(shù)。為了完整性和幫助理解遺留代碼,我們將使用另外一種方法注冊(cè)菜單:把一個(gè)文件路徑作為 $menu_slug 參數(shù)傳遞給 $function 參數(shù)。
<?php
function wporg_options_page()
{
add_menu_page(
'WPOrg',
'WPOrg Options',
'manage_options',
plugin_dir_path(__FILE__) . 'admin/view.php',
null,
plugin_dir_url(__FILE__) . 'images/icon_wporg.png',
20
);
}
add_action('admin_menu', 'wporg_options_page');
刪除頂級(jí)菜單
如果我們需要?jiǎng)h除后臺(tái)中已經(jīng)注冊(cè)的頂級(jí)菜單,可以使用 remove_menu_page() 函數(shù)。
remove_menu_page(
string $menu_slug
);
示例
比如,我們需要從 WordPress 后臺(tái)刪除 “工具” 這個(gè)頂級(jí)菜單。
<?php
function wporg_remove_options_page(){
remove_menu_page('tools.php');
}
add_action('admin_menu', 'wporg_remove_options_page', 99);
在刪除之前,我們需要確保已經(jīng)注冊(cè)了這個(gè)菜單,所以,刪除 Action 的優(yōu)先級(jí)應(yīng)該要比注冊(cè)的低。
子菜單
如果我們需要添加一個(gè)子菜單到 WordPress 后臺(tái),使用 add_submenu_page() 函數(shù)。
<?php
add_submenu_page(
string $parent_slug,
string $page_title,
string $menu_title,
string $capability,
string $menu_slug,
callable $function = ''
);
示例
假設(shè)我們需要在 “工具” 頂級(jí)菜單中,添加一個(gè)子菜單:“WPOrg 設(shè)置”
第一步,我們將創(chuàng)建一個(gè)輸出 HTML 的函數(shù),在這個(gè)函數(shù)中,我們執(zhí)行必要的安全檢查,使用 設(shè)置 API 顯示我們注冊(cè)的選項(xiàng)。
<?php
function wporg_options_page_html() {
// check user capabilities
if (!current_user_can('manage_options')) {
return;
}
?>
<div class=wrap>
<h1><?= esc_html(get_admin_page_title()); ?></h1>
<form action=options.php method=post>
<?php
// output security fields for the registered setting wporg_options
settings_fields('wporg_options');
// output setting sections and their fields
// (sections are registered for wporg, each field is registered to a specific section)
do_settings_sections('wporg');
// output save settings button
submit_button('Save Settings');
?>
</form>
</div>
<?php
}
第二步,把上面生成 HTML 的函數(shù)掛載到 admin_menu Action 鉤子上。
<?php
function wporg_options_page() {
add_submenu_page(
'tools.php',
'WPOrg Options',
'WPOrg Options',
'manage_options',
'wporg',
'wporg_options_page_html'
);
}
add_action('admin_menu', 'wporg_options_page');
add_submenu_page 的相關(guān)參數(shù),請(qǐng)參閱參考中的 add_submenu_page()。
預(yù)定義子菜單
WordPress 內(nèi)置了一些輔助函數(shù),提前幫助我們?cè)O(shè)置好了 $parent_slug 參數(shù),我們只需使用相應(yīng)的函數(shù)即可添加頁(yè)面為我們需要的頂級(jí)菜單的子菜單。以下是 WordPress 為我們定義好的輔助函數(shù)。
- add_dashboard_page() –
index.php - add_posts_page() –
edit.php - add_media_page() –
upload.php - add_pages_page() –
edit.php?post_type=page - add_comments_page() –
edit-comments.php - add_theme_page() –
themes.php - add_plugins_page() –
plugins.php - add_users_page() –
users.php - add_management_page() –
tools.php - add_options_page() –
options-general.php - add_options_page() –
settings.php - add_links_page() –
link-manager.php– WP 3.5 以后,需要一個(gè)插件才能使用。 - 自定義文章類型 –
edit.php?post_type=wporg_post_type - 網(wǎng)絡(luò)管理員 –
settings.php
刪除子菜單
刪除子菜單的方法和刪除頂級(jí)菜單是一樣的。