WordPress Version: 6.1
/**
* Determines whether the current user can access the current admin page.
*
* @since 1.5.0
*
* @global string $pagenow The filename of the current screen.
* @global array $menu
* @global array $submenu
* @global array $_wp_menu_nopriv
* @global array $_wp_submenu_nopriv
* @global string $plugin_page
* @global array $_registered_pages
*
* @return bool True if the current user can access the admin page, false otherwise.
*/
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;
}