Adaugă o pagină de administrare, dar nu o afișa în meniul admin
Am un plugin personalizat 'Charts' care are propriul său meniu. În acel meniu sunt link-uri către cele 3 pagini ale plugin-ului - 'Charts', 'Add Chart' și 'Edit Chart'. Cu toate acestea, nu vreau să afișez link-ul către 'Edit Chart'.
Iată cum adaug pagina în cauză -
$this->pagehook = add_submenu_page('charts', __('Edit Chart'), __('Edit Chart'), 'edit_charts', 'edit-chart', array(&$this, 'on_show_page'));
Am căutat pe internet și nu pot găsi o modalitate de a face acest lucru (care să funcționeze). Este posibil să elimini meniurile complete de nivel superior (nu asta am nevoie), și poți elimina intrări individuale din variabila globală $submenu
(dar făcând asta se elimină și capacitatea înregistrată), așa că nimeni nu poate accesa pagina -
global $submenu;
if(!empty($submenu['charts'])) : foreach($submenu['charts'] as $key => $page) :
if($page[0] === 'Edit Chart') :
/** Elimină toate permisiunile de acces la pagină */
//unset($submenu['charts'][$key]);
/** Elimină titlul, dar intrarea din meniu încă există, așa că arată ciudat */
$submenu['charts'][$key][0] = '';
endif;
endforeach;
endif;
M-am uitat să o ascund prin CSS, dar nu pot vedea o modalitate de a face asta prin HTML-ul pe care îl generează WordPress -
<li><a href="admin.php?page=edit-chart" tabindex="1">Edit Chart</a></li>
M-am gândit și la jQuery, dar are limitări similare cu CSS, plus că refuz să cred că sunt singurul care a dorit vreodată să facă acest lucru - trebuie să existe o cale, doar că nu o pot găsi!
Orice sugestii și sfaturi sunt apreciate.
Mulțumesc.

Din documentația pentru add_submenu_page()
, poți vedea că poți ascunde link-ul submeniului tău din elementul de meniu de nivel superior căruia îi aparține prin setarea slug
(primul argument) la null
:
add_action( 'admin_menu', 'register_my_custom_submenu_page' );
function register_my_custom_submenu_page() {
add_submenu_page(
null,
'Pagina mea personalizată de submeniu',
'Pagina mea personalizată de submeniu',
'manage_options',
'my-custom-submenu-page',
'my_custom_submenu_page_callback',
);
}
Pentru a evidenția elementul de meniu dorit (de ex. 'toate graficele' când accesezi pagina ascunsă 'editare grafic'), poți face următoarele:
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;
});

Super, dar evidențierea nu funcționează corect. Dacă setez submenu_file
acestea sunt afișate ca fiind curente. Dar meniul de nivel superior nu se deschide. Dacă setez parent_file
, WordPress rulează funcția get_admin_page_parent()
după filtre și o schimbă înapoi. De ce au adăugat dezvoltatorii WordPress filtrul parent_file
dacă oricum funcția îl schimbă înapoi? Poți ajuta?

De asemenea, dacă parent_slug
este setat ca null
, page_title
nu este folosit în titlu.

Folosește o pagină de submeniu ca slug părinte. Meniul de administrare are doar două niveluri, așa că al treilea nivel imaginar va fi ascuns.
Cod exemplu, testat:
add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );
function wpse_73622_register_hidden_page()
{
add_submenu_page(
'options-writing.php',
'Ascuns!',
'Ascuns!',
'exists',
'wpse_73622',
'wpse_73622_render_hidden_page'
);
# /wp-admin/admin.php?page=wpse_73622
}
function wpse_73622_render_hidden_page()
{
echo '<p>salut lume</p>';
}

Puteți utiliza CSS și veți putea accesa linkul prin URL-ul din tag-ul href:
#adminmenu a[href="admin.php?page=edit-chart"] {
display: none;
}
Nu există padding-uri sau spații suplimentare pentru elementul LI părinte, așa că nu este nevoie să-l ascundeți. De asemenea, veți putea accesa în continuare submeniul.
