add_submenu_page nu funcționează

15 iun. 2014, 20:41:57
Vizualizări: 23.5K
Voturi: 5

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?

1
Comentarii

ai folosit o altă clasă pentru fișierul submeniu. inițializează-l și definește-l în fișierul principal.

huykon225 huykon225
21 feb. 2017 18:13:45
Toate răspunsurile la întrebare 4
0
10

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.

15 iun. 2014 20:50:43
1

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' 
);
28 apr. 2016 16:29:05
Comentarii

A funcționat pentru mine. Acesta ar trebui să fie răspunsul acceptat. Deși OP ar fi trebuit să includă linia sa 'add_action' pentru noi toți să vedem, obținerea atributului $parent_slug corect pare a fi problema mai evidentă.

Kalnode Kalnode
12 aug. 2018 02:58:12
0

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ă.

4 ian. 2024 13:18:42
0

Pentru mine, am avut pentru capabilități manage-options în loc de manage_options. Asta a rezolvat problema pentru mine.

29 aug. 2023 17:03:42