add_submenu_page non funziona

15 giu 2014, 20:41:57
Visualizzazioni: 23.5K
Voti: 5

Ho creato un plugin che crea un menu personalizzato in questo modo:

    add_menu_page( 'Wholesale Pricing', 'Wholesale', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call'); 

Ora sto cercando di aggiungere una voce di sottomenu sotto questo elemento. Ho consultato il codex e ho scritto:

add_submenu_page( 'woo-wholesale', 'Registrazioni', 'Registrazioni', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' ); 

Immagino che questo sia sbagliato poiché la voce del sottomenu non viene visualizzata. Qualcuno può fare luce su questo problema?

1
Commenti

hai usato un'altra classe per il file submenu. Inizializzalo e definiscilo nel file principale.

huykon225 huykon225
21 feb 2017 18:13:45
Tutte le risposte alla domanda 4
0
10

Assicurati che il tuo hook add_action sia impostato su admin_menu.

Ecco un esempio di codice:

add_action('admin_menu', 'wpse149688');
function wpse149688(){
    add_menu_page( 'Prezzi all\'ingrosso', 'Ingrosso', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
    add_submenu_page( 'woo-wholesale', 'Registrazioni', 'Registrazioni', 'manage_options', 'woo-wholesale-registrazioni', 'wwpr_page_call' ); 
}

Verifica inoltre che l'utente con cui hai effettuato l'accesso abbia i permessi per visualizzare questo menu. Questo menu è impostato utilizzando la capability manage_options.

15 giu 2014 20:50:43
1

Ho commesso lo stesso errore dell'OP poiché non è intuitivo come far funzionare questa cosa. Leggendo il codex sui Menu di Amministrazione, ho scoperto la soluzione.

Il problema (almeno per me) era modificare il parametro $parent_slug nella chiamata a add_submenu_page(...).

Quindi, nel caso dell'OP, bisognerebbe cambiare:

add_submenu_page( 
    'woo-wholesale', 
    'Registrazioni', 
    'Registrazioni', 
    'manage_options', 
    'woo-wholesale-registrations', 
    'wwpr_page_call' 
);

in:

add_submenu_page( 
    'edit.php?post_type=woo-wholesale', 
    'Registrazioni', 
    'Registrazioni', 
    'manage_options', 
    'woo-wholesale-registrations', 
    'wwpr_page_call' 
);
28 apr 2016 16:29:05
Commenti

Ha funzionato per me. Questa dovrebbe essere la risposta accettata. Anche se l'OP avrebbe dovuto includere la sua riga 'add_action' per farcelo vedere a tutti, ottenere il corretto attributo $parent_slug sembra essere il problema più evidente.

Kalnode Kalnode
12 ago 2018 02:58:12
0

Il tuo codice è corretto. Tuttavia manca qualcosa che non è affatto ovvio, e chiunque arriverà a questa domanda in futuro, dovrebbe leggere quanto segue:

Quando una pagina menu ha 0 o 1 sottopagine menu, non verranno mostrati sottomenu.

Una pagina menu contiene una pagina di per sé.

Una pagina menu che contiene 1 sottopagina menu, apparirà come se non avesse una sottopagina menu. Questo perché l'elemento menu di primo livello e il primo elemento menu di secondo livello appartenente a quel menu di primo livello sono pensati per mostrare la stessa pagina.

In altre parole, non puoi avere un singolo elemento sottomenu, perché questo non sembra avere senso per WordPress.

"Solo una pagina? Usa semplicemente l'elemento menu stesso allora! Non c'è bisogno di un dropdown."

Nota che ogni volta che fai clic su una voce di menu nell'interfaccia di amministrazione che ha sottovoci, caricherà la sua prima sottovoce. Quindi la voce di menu e la sua prima sottovoce sono essenzialmente la stessa cosa. Tuttavia, puoi rinominare la sottovoce.

Alcuni esempi di questo:

  • Bacheca = Home
  • Articoli = Tutti gli articoli
  • Aspetto = Temi
  • Strumenti = Strumenti disponibili

Quindi nel tuo caso, facendo clic su Prezzi all'ingrosso verrà caricata la pagina Registrazioni.

Quando una pagina menu contiene 2 o più sottopagine menu, le sottopagine menu diventeranno visibili. Questo è ciò che molti di noi non sanno all'inizio.

Quindi il trucco è creare una sottopagina menu identica alla pagina menu (puoi cambiare $page_title e $menu_title se vuoi) e poi la tua sottopagina aggiuntiva:

add_menu_page( '', 'Voce Menu', $capability, 'parent_slug', $callback );
add_submenu_page( 'parent_slug', 'Titolo Pagina', 'Prima Sottovoce', $capability, 'parent_slug', $callback );
add_submenu_page( 'parent_slug', 'Secondo Titolo Pagina', 'Seconda Sottovoce', $capability, 'submenu_slug', $submenu_callback );

Come puoi vedere, il $page_title per add_menu_page potrebbe anche essere lasciato come stringa vuota (ma non null), perché il titolo utilizzato per la pagina sarà il $page_title del primo sottomenu. Ma consiglio di inserire la stessa stringa per entrambi per una migliore leggibilità.

Ora applichiamo questo al tuo codice:

add_menu_page( 'Prezzi all\'ingrosso', 'Ingrosso', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
add_submenu_page( 'woo-wholesale', 'Prezzi all\'ingrosso', 'Prezzi', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call' );
add_submenu_page( 'woo-wholesale', 'Registrazioni', 'Registrazioni', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' );

E avrai la seguente struttura del menu:

Ingrosso
-- Prezzi
-- Registrazioni

Dove facendo clic su Ingrosso o Prezzi verrai indirizzato alla stessa pagina.

4 gen 2024 13:18:42
0

Per me avevo le capacità manage-options invece di manage_options. Questo ha risolto il problema nel mio caso.

29 ago 2023 17:03:42