get_admin_page_parent()
云策文档标注
概述
get_admin_page_parent() 函数用于获取当前 WordPress 管理页面的父文件。它通过分析全局变量和参数来确定父菜单的 slug 或文件名,适用于插件和主题开发中处理管理页面层级关系。
关键要点
- 函数返回当前管理页面的父文件字符串,若无则返回空字符串。
- 参数 $parent_page 可选,用于指定父菜单的 slug 或标准 WordPress 管理页面文件名,默认为空字符串。
- 函数内部依赖全局变量如 $parent_file、$menu、$submenu、$pagenow、$typenow、$plugin_page 等来动态判断父页面。
- 处理逻辑包括检查参数、admin.php 页面、插件页面以及子菜单遍历,以应对不同场景。
- 函数在 WordPress 1.5.0 版本引入,属于核心函数,用于后台管理界面开发。
代码示例
// 获取当前管理页面的父文件
$parent_page = get_admin_page_parent();
echo $parent_page; // 输出父文件 slug 或空字符串
// 使用可选参数指定父页面
$parent_page = get_admin_page_parent('edit.php');
echo $parent_page; // 如果当前页面是 edit.php 的子页面,则返回 'edit.php'注意事项
- 函数主要用于后台管理页面,不适用于前端页面。
- 在插件或主题开发中,应确保全局变量已正确设置,否则可能返回不准确结果。
- 函数返回的父文件可能经过 $_wp_real_parent_file 映射处理,需注意实际文件路径。
原文内容
Gets the parent file of the current admin page.
Parameters
$parent_pagestringoptional-
The slug name for the parent menu (or the file name of a standard WordPress admin page). Default empty string.
Source
function get_admin_page_parent( $parent_page = '' ) {
global $parent_file, $menu, $submenu, $pagenow, $typenow,
$plugin_page, $_wp_real_parent_file, $_wp_menu_nopriv, $_wp_submenu_nopriv;
if ( ! empty( $parent_page ) && 'admin.php' !== $parent_page ) {
if ( isset( $_wp_real_parent_file[ $parent_page ] ) ) {
$parent_page = $_wp_real_parent_file[ $parent_page ];
}
return $parent_page;
}
if ( 'admin.php' === $pagenow && isset( $plugin_page ) ) {
foreach ( (array) $menu as $parent_menu ) {
if ( $parent_menu[2] === $plugin_page ) {
$parent_file = $plugin_page;
if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
$parent_file = $_wp_real_parent_file[ $parent_file ];
}
return $parent_file;
}
}
if ( isset( $_wp_menu_nopriv[ $plugin_page ] ) ) {
$parent_file = $plugin_page;
if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
$parent_file = $_wp_real_parent_file[ $parent_file ];
}
return $parent_file;
}
}
if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[ $pagenow ][ $plugin_page ] ) ) {
$parent_file = $pagenow;
if ( isset( $_wp_real_parent_file[ $parent_file ] ) ) {
$parent_file = $_wp_real_parent_file[ $parent_file ];
}
return $parent_file;
}
foreach ( array_keys( (array) $submenu ) as $parent_page ) {
foreach ( $submenu[ $parent_page ] as $submenu_array ) {
if ( isset( $_wp_real_parent_file[ $parent_page ] ) ) {
$parent_page = $_wp_real_parent_file[ $parent_page ];
}
if ( ! empty( $typenow ) && "$pagenow?post_type=$typenow" === $submenu_array[2] ) {
$parent_file = $parent_page;
return $parent_page;
} elseif ( empty( $typenow ) && $pagenow === $submenu_array[2]
&& ( empty( $parent_file ) || ! str_contains( $parent_file, '?' ) )
) {
$parent_file = $parent_page;
return $parent_page;
} elseif ( isset( $plugin_page ) && $plugin_page === $submenu_array[2] ) {
$parent_file = $parent_page;
return $parent_page;
}
}
}
if ( empty( $parent_file ) ) {
$parent_file = '';
}
return '';
}
Changelog
| Version | Description |
|---|---|
| 1.5.0 | Introduced. |