Wordpress - Add an admin page, but don't show it on the admin menu
From the docs on add_submenu_page()
, you see that you can hide your submenu link from a top level menu item to which it belongs be setting the slug
(1st argument) to null
:
add_action( 'admin_menu', 'register_my_custom_submenu_page' );
function register_my_custom_submenu_page() {
add_submenu_page(
null,
'My Custom Submenu Page',
'My Custom Submenu Page',
'manage_options',
'my-custom-submenu-page',
'my_custom_submenu_page_callback',
);
}
To highlight the desired menu item (e.g. 'all charts' when accessing the hidden 'edit chart' page), you can do the following:
add_filter( 'submenu_file', function($submenu_file){
$screen = get_current_screen();
if($screen->id === 'id-of-page-to-hide'){
$submenu_file = 'id-of-page-to-higlight';
}
return $submenu_file;
});
Use a submenu page as parent slug. The admin menu has just two levels, so the imaginary third level will be hidden.
Sample code, tested:
add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );
function wpse_73622_register_hidden_page()
{
add_submenu_page(
'options-writing.php',
'Hidden!',
'Hidden!',
'exists',
'wpse_73622',
'wpse_73622_render_hidden_page'
);
# /wp-admin/admin.php?page=wpse_73622
}
function wpse_73622_render_hidden_page()
{
echo '<p>hello world</p>';
}