user_can_access_admin_page()
云策文档标注
概述
user_can_access_admin_page() 函数用于判断当前用户是否有权限访问当前 WordPress 管理页面。它通过检查全局变量和菜单权限来返回布尔值。
关键要点
- 函数返回布尔值:true 表示用户可访问,false 表示不可访问。
- 依赖全局变量如 $pagenow、$menu、$submenu、$_wp_menu_nopriv、$_wp_submenu_nopriv、$plugin_page 和 $_registered_pages。
- 使用 get_admin_page_parent() 获取父页面,并结合 current_user_can() 检查用户能力。
- 处理插件页面和核心管理页面的权限验证逻辑。
代码示例
if ( user_can_access_admin_page() ) {
// 用户有权限访问当前管理页面
} else {
// 用户无权限,可重定向或显示错误
}注意事项
- 函数在 WordPress 1.5.0 版本引入,主要用于内部权限检查。
- 开发者应确保在管理页面上下文中调用,以避免全局变量未定义错误。
- 相关函数包括 get_admin_page_parent()、get_plugin_page_hookname() 和 current_user_can()。
原文内容
Determines whether the current user can access the current admin page.
Source
function user_can_access_admin_page() {
global $pagenow, $menu, $submenu, $_wp_menu_nopriv, $_wp_submenu_nopriv,
$plugin_page, $_registered_pages;
$parent = get_admin_page_parent();
if ( ! isset( $plugin_page ) && isset( $_wp_submenu_nopriv[ $parent ][ $pagenow ] ) ) {
return false;
}
if ( isset( $plugin_page ) ) {
if ( isset( $_wp_submenu_nopriv[ $parent ][ $plugin_page ] ) ) {
return false;
}
$hookname = get_plugin_page_hookname( $plugin_page, $parent );
if ( ! isset( $_registered_pages[ $hookname ] ) ) {
return false;
}
}
if ( empty( $parent ) ) {
if ( isset( $_wp_menu_nopriv[ $pagenow ] ) ) {
return false;
}
if ( isset( $_wp_submenu_nopriv[ $pagenow ][ $pagenow ] ) ) {
return false;
}
if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[ $pagenow ][ $plugin_page ] ) ) {
return false;
}
if ( isset( $plugin_page ) && isset( $_wp_menu_nopriv[ $plugin_page ] ) ) {
return false;
}
foreach ( array_keys( $_wp_submenu_nopriv ) as $key ) {
if ( isset( $_wp_submenu_nopriv[ $key ][ $pagenow ] ) ) {
return false;
}
if ( isset( $plugin_page ) && isset( $_wp_submenu_nopriv[ $key ][ $plugin_page ] ) ) {
return false;
}
}
return true;
}
if ( isset( $plugin_page ) && $plugin_page === $parent && isset( $_wp_menu_nopriv[ $plugin_page ] ) ) {
return false;
}
if ( isset( $submenu[ $parent ] ) ) {
foreach ( $submenu[ $parent ] as $submenu_array ) {
if ( isset( $plugin_page ) && $submenu_array[2] === $plugin_page ) {
return current_user_can( $submenu_array[1] );
} elseif ( $submenu_array[2] === $pagenow ) {
return current_user_can( $submenu_array[1] );
}
}
}
foreach ( $menu as $menu_array ) {
if ( $menu_array[2] === $parent ) {
return current_user_can( $menu_array[1] );
}
}
return true;
}
Changelog
| Version | Description |
|---|---|
| 1.5.0 | Introduced. |