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 显示我们注册选项。

建议使用一个 DIV 来包括我们的 HTML 内容。
<?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 显示我们注册的选项。

建议使用一个 DIV 包括我们的 HTML 内容。
<?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 为我们定义好的辅助函数。

删除子菜单

删除子菜单的方法和删除顶级菜单是一样的。

我们提供 WordPress主题和插件定制开发服务

本站长期承接 WordPress主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 10 年WordPress开发经验,如果你想 用WordPress开发网站, 请联系微信: iwillhappy1314,或邮箱: amos@wpcio.com 咨询。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

*