WordPress插件开发教程手册 — 管理菜单
管理菜单是 WordPress 后台左侧显示的后台管理功能菜单,可以让我们为插件或主题添加自定义设置选项页面。
顶级菜单和子菜单
顶级菜单在 WordPress 后台左侧显示,可以包含一组子菜单。插件需要添加顶级菜单还是子菜单,可以根据最终用户需求确定。
顶级菜单
添加一个顶级菜单
如果我们需要添加顶级菜单到 WordPress 后台,可以使用 add_menu_page() 函数。
<?php
add_menu_page(
string $page_title,
string $menu_title,
string $capability,
string $menu_slug,
callable $function = '',
string $icon_url = '',
int $position = null
);
示例
比如,我们需要添加一个名为 “WPOrg” 的顶级菜单。
第一步,我们需要创建一个输出 HTML 的函数,在这个函数中,我们会执行必要的安全检查,并使用 设置 API 显示我们注册选项。
<?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 的函数挂载到 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 创建 HTML
可移植代码的最佳实践是创建一个需要包含文件的回调函数。为了完整性和帮助理解遗留代码,我们将使用另外一种方法注册菜单:把一个文件路径作为 $menu_slug 参数传递给 $function 参数。
<?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');
删除顶级菜单
如果我们需要删除后台中已经注册的顶级菜单,可以使用 remove_menu_page() 函数。
remove_menu_page(
string $menu_slug
);
示例
比如,我们需要从 WordPress 后台删除 “工具” 这个顶级菜单。
<?php
function wporg_remove_options_page(){
remove_menu_page('tools.php');
}
add_action('admin_menu', 'wporg_remove_options_page', 99);
在删除之前,我们需要确保已经注册了这个菜单,所以,删除 Action 的优先级应该要比注册的低。
子菜单
如果我们需要添加一个子菜单到 WordPress 后台,使用 add_submenu_page() 函数。
<?php
add_submenu_page(
string $parent_slug,
string $page_title,
string $menu_title,
string $capability,
string $menu_slug,
callable $function = ''
);
示例
假设我们需要在 “工具” 顶级菜单中,添加一个子菜单:“WPOrg 设置”
第一步,我们将创建一个输出 HTML 的函数,在这个函数中,我们执行必要的安全检查,使用 设置 API 显示我们注册的选项。
<?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 的函数挂载到 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 的相关参数,请参阅参考中的 add_submenu_page()。
预定义子菜单
WordPress 内置了一些辅助函数,提前帮助我们设置好了 $parent_slug 参数,我们只需使用相应的函数即可添加页面为我们需要的顶级菜单的子菜单。以下是 WordPress 为我们定义好的辅助函数。
- 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 以后,需要一个插件才能使用。 - 自定义文章类型 –
edit.php?post_type=wporg_post_type
- 网络管理员 –
settings.php
删除子菜单
删除子菜单的方法和删除顶级菜单是一样的。