Aggiungere una pagina admin senza mostrarla nel menu amministrativo

22 nov 2012, 16:35:50
Visualizzazioni: 20.9K
Voti: 10

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.

1
Commenti

Dove stai agganciando questa funzione? Quale filtro/azione?

s_ha_dum s_ha_dum
22 nov 2012 16:45:19
Tutte le risposte alla domanda 3
3
32

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;
});
19 set 2015 15:32:20
Commenti

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 DARK_DIESEL
28 ago 2018 16:11:17

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

DARK_DIESEL DARK_DIESEL
28 ago 2018 16:12:10

Puoi usare 'options.php' invece di null.

RavanH RavanH
20 mar 2019 01:58:01
1
12

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>';
}
22 nov 2012 16:56:05
Commenti

Questo funziona, anche se ciò che non funziona è lo stato attivo sull'elemento del menu genitore che viene perso, quindi il sottomenu si chiude e nessun elemento genitore del menu viene selezionato nella barra laterale sinistra.

Lee Lee
1 ago 2016 12:50:30
0

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.

31 mar 2021 16:25:50