WordPress顶级菜单自定义和钩子应用示例代码

WordPress顶级菜单自定义和钩子应用示例代码

用 add_action('admin_menu',...) 挂载 add_menu_page(),可自定义 WordPress 后台顶级菜单及回调功能。

添加顶级菜单

要向 WordPress 管理添加新的顶级菜单,请使用add_menu_page() 函数。


add_menu_page(

string $page_title,

string $menu_title,

string $capability,

string $menu_slug,

callable $function = '',

string $icon_url = '',

int $position = null

);

例子

假设我们要添加一个名为“WPOrg”的新顶级菜单。

第一步是创建一个输出 HTML 的函数。在这个函数中,我们将执行必要的安全检查,并渲染使用Settings API注册的选项。

我们建议使用<div>带有 类的来包装您的 HTML wrap。


function wporg_options_page_html() {

?>

<div class="wrap">

<h1><?php echo 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', 'textdomain' ) );

?>

</form>

</div>

<?php

}

第二步是注册我们的 WPOrg 菜单。注册需要在admin_menu动作钩子期间进行。


add_action( 'admin_menu', 'wporg_options_page' );

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_menu_page() 。

使用 PHP 文件编写 HTML

可移植代码的最佳实践是创建一个需要/包含您的 PHP 文件的回调。

为了完整性并帮助您理解遗留代码,我们将展示另一种方式:将 aPHP file path作为$menu_slug参数传递null $function。


add_action( 'admin_menu', 'wporg_options_page' );

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

);

}

删除顶级菜单

要从 WordPress 管理中删除已注册的菜单,请使用remove_menu_page() 函数。


remove_menu_page(

string $menu_slug

);

移除菜单不会阻止用户直接访问。

这绝不应该被用来限制用户的功能。

例子

假设我们想删除“工具”菜单。


add_action( 'admin_menu', 'wporg_remove_options_page', 99 );

function wporg_remove_options_page() {

remove_menu_page( 'tools.php' );

}

admin_menu在尝试删除之前,请确保菜单已在钩子中注册,为add_action()指定更高的优先级数字。

提交表单

要处理选项页面上的表单提交,您需要两样东西:

使用页面的URL作为action表单的属性。

添加一个带有 slug 的钩子,由 返回add_menu_page。

如果您在后端手动创建表单,则只需遵循以下步骤。建议使用Settings API执行此操作。

表单动作属性

使用$menu_slug选项页面的参数作为 的第一个参数 menu_page_url()。由于该函数默认会自动转义 URL 并回显,因此可以直接在<form>标签内使用:

<form action="<?php menu_page_url( 'wporg' ) ?>" method="post">

处理表格

您在添加页面时指定的操作$function仅在显示页面时才会被调用,如果您需要将标头(例如重定向)发送回浏览器,则这并不合适。

add_menu_page返回一个$hookname,WordPress 会"load-$hookname"在输出任何 HTML 之前触发该操作。您可以使用它来分配一个函数,该函数可以处理表单。

"load-$hookname"每次显示选项页面之前都会执行,即使表单未提交。

考虑到返回参数和操作,上面的例子将是这样的:


add_action( 'admin_menu', 'wporg_options_page' );

function wporg_options_page() {

 $hookname = add_menu_page(

 'WPOrg',

 'WPOrg Options',

 'manage_options',

 'wporg',

 'wporg_options_page_html',

 plugin_dir_url(__FILE__) . 'images/icon_wporg.png',

 20

 );

 

 add_action( 'load-' . $hookname, 'wporg_options_page_submit' );

}

您可以wporg_options_page_submit根据需要进行编程,但请记住必须手动执行所有必要的检查,包括:

表单是否正在提交('POST' === $_SERVER['REQUEST_METHOD'])。

CSRF验证

验证

净化

顶部