add_submenu_page nu funcționează
Am creat un plugin care creează un meniu personalizat astfel:
add_menu_page( 'Wholesale Pricing', 'Wholesale', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
Acum încerc să adaug un element submeniu sub acesta. Am citit documentația și am ajuns la:
add_submenu_page( 'woo-wholesale', 'Registrations', 'Registrations', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' );
Bănuiesc că acest cod este incorect deoarece elementul submeniu nu apare. Poate cineva să mă ajute cu o explicație?

Asigură-te că hook-ul tău add_action
este setat la admin_menu.
Iată un exemplu de cod:
add_action('admin_menu', 'wpse149688');
function wpse149688(){
add_menu_page( 'Prețuri en gros', 'En gros', 'manage_options', 'woo-wholesale', 'woo_wholesale_page_call');
add_submenu_page( 'woo-wholesale', 'Înregistrări', 'Înregistrări', 'manage_options', 'woo-wholesale-registrations', 'wwpr_page_call' );
}
De asemenea, verifică dacă utilizatorul cu care te-ai autentificat are permisiunea de a vizualiza acest meniu. Deoarece acest meniu este setat folosind capabilitatea manage_options
.

Am făcut aceeași greșeală ca și OP, deoarece nu este intuitiv cum să faci acest lucru să funcționeze. Citind codex-ul despre Meniurile de administrare, am descoperit răspunsul.
Problema (pentru mine, cel puțin) a fost să editez parametrul $parent_slug
din apelul către add_submenu_page(...)
.
Deci, în cazul OP, ai schimba:
add_submenu_page(
'woo-wholesale',
'Registrations',
'Registrations',
'manage_options',
'woo-wholesale-registrations',
'wwpr_page_call'
);
în:
add_submenu_page(
'edit.php?post_type=woo-wholesale',
'Registrations',
'Registrări',
'manage_options',
'woo-wholesale-registrations',
'wwpr_page_call'
);

Codul tău este corect. Cu toate acestea, lipsește ceva care nu este deloc evident, iar oricine va întâlni această întrebare în viitor ar trebui să citească următoarele:
Când o pagina de meniu are 0 sau 1 subpagini de meniu, nu vor apărea submeniuri.
O pagină de meniu conține o pagină în sine.
O pagină de meniu care conține 1 subpagină de meniu, va apărea la fel ca și cum nu ar avea o subpagină. Acest lucru se întâmplă deoarece elementul de meniu de prim nivel și primul element de meniu de al doilea nivel care aparține acelui meniu de prim nivel sunt destinate să afișeze aceeași pagină.
Cu alte cuvinte, nu poți avea un singur element de submeniu, deoarece acest lucru nu pare a avea sens pentru WordPress.
"Doar o pagină? Folosește elementul de meniu în sine atunci! Nu este nevoie de un meniu derulant."
Observă că de fiecare dată când dai click pe un element de meniu din interfața de administrare care are subelemente, acesta va încărca primul său subelement. Deci elementul de meniu și primul său subelement sunt în esență același lucru. Cu toate acestea, poți redenumi subelementul.
Câteva exemple:
- Panou de control = Acasă
- Articole = Toate articolele
- Aspect = Tematici
- Unelte = Unelte disponibile
Deci, în cazul tău, dând click pe Prețuri en-gros va încărca Înregistrări.
Când o pagină de meniu conține 2 sau mai multe subpagini de meniu, subpaginile de meniu vor deveni vizibile. Acesta este lucru pe care majoritatea nu îl știm la început.
Așadar, trucul este să creezi o subpagină de meniu identică cu pagina de meniu (poți schimba $page_title și $menu_title dacă dorești) și apoi subpaginile suplimentare:
add_menu_page( '', 'Element de meniu', $capability, 'slug_parinte', $callback );
add_submenu_page( 'slug_parinte', 'Titlul paginii', 'Primul subelement', $capability, 'slug_parinte', $callback );
add_submenu_page( 'slug_parinte', 'Al doilea titlu al paginii', 'Al doilea subelement', $capability, 'slug_submeniu', $submenu_callback );
După cum poți vedea, $page_title
pentru add_menu_page
poate fi lăsat chiar ca un string gol (dar nu null
), deoarece titlul folosit pentru pagină va fi $page_title
al primului submeniu. Dar recomand să introduci același string pentru ambele pentru lizibilitate.
Acum să aplicăm acest lucru în codul tău:
add_menu_page( 'Prețuri en-gros', 'En-gros', 'manage_options', 'woo-en-gros', 'woo_wholesale_page_call');
add_submenu_page( 'woo-en-gros', 'Prețuri en-gros', 'Prețuri', 'manage_options', 'woo-en-gros', 'woo_wholesale_page_call' );
add_submenu_page( 'woo-en-gros', 'Înregistrări', 'Înregistrări', 'manage_options', 'woo-en-gros-înregistrări', 'wwpr_page_call' );
Și vei avea următoarea structură de meniu:
En-gros
-- Prețuri
-- Înregistrări
Unde dând click fie pe En-gros, fie pe Prețuri te va duce la aceeași pagină.
