Aggiungere una pagina admin senza mostrarla nel menu amministrativo
Ho un plugin personalizzato 'Charts' che ha il suo menu. In quel menu ci sono link a 3 pagine del plugin - 'Charts', 'Add Chart' e 'Edit Chart'. Tuttavia, non voglio visualizzare il link a 'Edit Chart'.
Ecco come aggiungo la pagina in questione -
$this->pagehook = add_submenu_page('charts', __('Modifica Grafico'), __('Modifica Grafico'), 'edit_charts', 'edit-chart', array(&$this, 'on_show_page'));
Ho cercato ovunque su internet e non riesco a trovare un modo per farlo (che funzioni). È possibile rimuovere interi menu di primo livello (non quello che mi serve), e si possono rimuovere singole voci dalla variabile globale $submenu
(ma facendo questo si rimuovono anche i permessi registrati), quindi nessuno può accedere alla pagina -
global $submenu;
if(!empty($submenu['charts'])) : foreach($submenu['charts'] as $key => $page) :
if($page[0] === 'Modifica Grafico') :
/** Rimuove tutti i permessi di accesso alla pagina */
//unset($submenu['charts'][$key]);
/** Rimuove il titolo, ma la voce di menu esiste ancora, quindi appare strano */
$submenu['charts'][$key][0] = '';
endif;
endforeach;
endif;
Ho provato a nasconderlo via CSS, ma non riesco a trovare un modo per farlo attraverso l'HTML che WordPress genera -
<li><a href="admin.php?page=edit-chart" tabindex="1">Modifica Grafico</a></li>
Ho anche considerato jQuery, ma ha limitazioni simili al metodo CSS, inoltre mi rifiuto di credere di essere l'unico che ha mai voluto fare questo - deve esserci un modo, semplicemente non riesco a trovarlo!
Qualsiasi suggerimento e consiglio è apprezzato.
Grazie.

Dalla documentazione su add_submenu_page()
, puoi vedere che puoi nascondere il link del tuo sottomenu dall'elemento del menu di primo livello a cui appartiene impostando lo slug
(primo argomento) a null
:
add_action( 'admin_menu', 'register_my_custom_submenu_page' );
function register_my_custom_submenu_page() {
add_submenu_page(
null,
'La mia pagina di sottomenu personalizzata',
'La mia pagina di sottomenu personalizzata',
'manage_options',
'my-custom-submenu-page',
'my_custom_submenu_page_callback',
);
}
Per evidenziare l'elemento del menu desiderato (ad esempio 'tutti i grafici' quando si accede alla pagina nascosta 'modifica grafico'), puoi fare quanto segue:
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;
});

Bello, ma l'evidenziazione non funziona correttamente. Se imposto submenu_file
vengono visualizzati come correnti. Ma il menu di livello superiore non si apre. Se invece imposto parent_file
, wp esegue la funzione get_admin_page_parent()
dopo i filtri e la riporta allo stato originale. Per quale motivo gli sviluppatori di wp hanno aggiunto il filtro parent_file
se tanto la funzione lo ripristina? Puoi aiutarmi?

Inoltre, se parent_slug
è impostato su null
, page_title
non viene utilizzato nel titolo.

Utilizza una pagina di sottomenu come slug genitore. Il menu di amministrazione ha solo due livelli, quindi il terzo livello immaginario sarà nascosto.
Codice di esempio, testato:
add_action( 'admin_menu', 'wpse_73622_register_hidden_page' );
function wpse_73622_register_hidden_page()
{
add_submenu_page(
'options-writing.php',
'Nascosto!',
'Nascosto!',
'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>';
}

Puoi utilizzare il CSS e sarai in grado di accedervi tramite l'URL nel tag href:
#adminmenu a[href="admin.php?page=edit-chart"] {
display: none;
}
Non ci sono padding o spaziature extra per l'elemento LI genitore, quindi non è necessario nasconderlo. Sarai comunque in grado di accedere al sottomenu.
