Ce face admin_menu
admin_menu rulează în administrare, după ce structura de bază a meniului există, și este locul în care adaugi pagini noi. Documentația precizează că admin_init rulează după admin_menu, deci paginile nu se adaugă din admin_init. Pentru rețelele multisite, meniul de rețea are hook-ul network_admin_menu.
add_menu_page() creează un element de nivel superior (cu pictogramă și poziție) și întoarce sufixul hook-ului paginii (de exemplu toplevel_page_dex-rezervari). add_submenu_page() pune o pagină sub un meniu existent: al tău sau unul al WordPress, dat prin numele fișierului (options-general.php, tools.php, edit.php?post_type=page). Parametrul $position al lui add_submenu_page() există din WordPress 5.3.0.
$capability decide cine vede elementul în meniu, dar documentația cere ca funcția care afișează pagina să verifice și ea dreptul utilizatorului. Ambele funcții există din WordPress 1.5.0.
Parametri
| Parametru | Descriere |
|---|---|
$context |
Parametrul acțiunii admin_menu: un text gol, fără rol practic. |
$page_title |
Textul din <title> când pagina este deschisă. |
$menu_title |
Textul afișat în meniu. |
$capability |
Dreptul necesar pentru a vedea elementul, de exemplu manage_options sau edit_posts. |
$menu_slug |
Identificator unic; doar litere mici, cifre, cratime și liniuțe de subliniere (compatibil cu sanitize_key()). Apare în URL: admin.php?page=dex-rezervari. |
$callback |
Funcția care afișează conținutul paginii. |
$icon_url |
Doar la add_menu_page(): o clasă Dashicons (dashicons-calendar-alt), un SVG codat base64 (data:image/svg+xml;base64,...) sau 'none'. |
$position |
Poziția în meniu (număr). Implicit null: la sfârșit. |
$parent_slug |
Doar la add_submenu_page(): slug-ul meniului părinte sau fișierul unei pagini WordPress (options-general.php). |
Ce returnează
add_menu_page(): sufixul hook-ului paginii (text). add_submenu_page(): sufixul hook-ului sau false dacă utilizatorul nu are dreptul cerut.
Exemple
Exemplul 1: O pagină „Rezervări” în meniul principal
Elementul apare doar administratorilor (manage_options), cu pictograma calendar, după „Comentarii”. Funcția de afișare verifică din nou dreptul.
add_action( 'admin_menu', 'dex_meniu_rezervari' );
function dex_meniu_rezervari() {
add_menu_page(
'Rezervări Cafenea Iași',
'Rezervări',
'manage_options',
'dex-rezervari',
'dex_pagina_rezervari',
'dashicons-calendar-alt',
26
);
}
function dex_pagina_rezervari() {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$azi = 3;
echo '<div class="wrap">';
echo '<h1>' . esc_html( get_admin_page_title() ) . '</h1>';
echo '<p>' . esc_html( "Ai {$azi} rezervări pentru astăzi." ) . '</p>';
echo '</div>';
}
Ce afișează pagina
<div class="wrap"><h1>Rezervări Cafenea Iași</h1><p>Ai 3 rezervări pentru astăzi.</p></div>
Exemplul 2: Submeniuri: unul propriu și unul sub „Setări”
Primul submeniu cu același slug ca părintele redenumește primul element (altfel s-ar repeta „Rezervări”). Al doilea adaugă o pagină sub Setări.
add_action( 'admin_menu', 'dex_submeniuri' );
function dex_submeniuri() {
add_submenu_page( 'dex-rezervari', 'Toate rezervările', 'Toate', 'manage_options', 'dex-rezervari', 'dex_pagina_rezervari' );
add_submenu_page( 'dex-rezervari', 'Program', 'Program', 'manage_options', 'dex-program', 'dex_pagina_program' );
add_submenu_page( 'options-general.php', 'Setări cafenea', 'Cafenea', 'manage_options', 'dex-setari', 'dex_pagina_setari' );
}
Greșeli frecvente
- Paginile adăugate din
admin_init: acesta rulează dupăadmin_menu, iar paginile nu mai apar sau dau eroarea că nu ai voie să accesezi pagina. - Te bazezi doar pe
$capability: funcția de afișare (și orice procesare de formular) trebuie să verifice și eacurrent_user_can(). - Slug cu majuscule sau spații (
'Rezervari Cafenea'): folosește doar litere mici, cifre,-și_. - Slug identic cu al altui plugin: paginile se suprascriu. Pune prefixul tău (
dex-).
Comenzi înrudite
add_action: Leagă o funcție de o acțiune WordPress, ca să ruleze automat când WordPress ajunge în acel punct.current_user_can: Verifică dacă utilizatorul conectat are un anumit drept (capability), de exemplu manage_options sau edit_post pentru un articol.wp_enqueue_scripts: Acțiunea în care adaugi fișierele CSS și JavaScript ale temei sau pluginului pentru partea publică a site-ului.get_option / update_option: Citesc, salvează și șterg setări permanente ale site-ului în tabelul wp_options (Options API).wp_nonce_field: Adaugă într-un formular un câmp ascuns cu un nonce, un cod care dovedește că cererea pornește chiar de pe site-ul tău.