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?
DARK_DIESEL
Inoltre, se parent_slug è impostato su null, page_title non viene utilizzato nel titolo.
DARK_DIESEL
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.