添加子菜单

要向 WordPress 管理后台添加新的子菜单,请使用 add_submenu_page() 函数。

add_submenu_page(
	string $parent_slug,
	string $page_title,
	string $menu_title,
	string $capability,
	string $menu_slug,
	callable $function = ''
);

示例

假设我们要在“工具”顶级菜单下添加一个名为“WPOrg Options”的子菜单。

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

我们建议使用一个类为 wrap 的 <div> 来包裹您的 HTML。
function wporg_options_page_html() {
	// check user capabilities
	if ( ! current_user_can( 'manage_options' ) ) {
		return;
	}
	?>
	<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 Options 子菜单。注册需要在 admin_menu 动作钩子上进行。

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

预定义子菜单

如果我们有辅助函数来定义 WordPress 内置顶级菜单的 $parent_slug,并省去我们手动在源代码中搜索的麻烦,那该多好?

以下是父级 slugs 及其辅助函数的列表:

移除子菜单

移除子菜单的过程与 移除顶级菜单 完全相同。

提交表单

在子菜单中处理表单提交的过程与 在顶级菜单中提交表单 完全相同。

add_submenu_page() 以及所有预定义子菜单的函数(add_dashboard_page、add_posts_page 等)将返回一个 $hookname,您可以将其用作 add_action 的第一个参数,以处理自定义页面中的表单提交:

function wporg_options_page() {
	$hookname = add_submenu_page(
		'tools.php',
		'WPOrg Options',
		'WPOrg Options',
		'manage_options',
		'wporg',
		'wporg_options_page_html'
	);

	add_action( 'load-' . $hookname, 'wporg_options_page_html_submit' );
}

add_action('admin_menu', 'wporg_options_page');

一如既往,不要忘记检查表单是否正在提交,执行 CSRF 验证、验证 和清理。