În Partea 3 din această serie, am analizat diferitele funcții de meniu furnizate de API-ul WordPress. Dacă ați urmărit mai departe, atunci știți că deja am creat o pagină de setări pentru tema noastră utilizând add_theme_page
funcţie. Deși introducerea meniurilor și a submeniurilor nu fac parte explicit din API-ul Setări, acestea joacă un rol în construirea funcționalității personalizate, a pluginurilor și / sau a temelor.
În acest articol, vom introduce un nou meniu în tabloul de bord WordPress, care va face opțiunile temei disponibile în altă parte, cu excepția opțiunilor "Aspect".
Înainte de a începe: Acest articol presupune că sunteți familiarizat cu setările API pentru setări și opțiunile de temă. Dacă sunteți un dezvoltator WordPress începător sau chiar intermediar, recomand insistent recuperarea restului seriei înainte de a vă scufunda în acest post.
Deoarece ne-am uitat deja la fiecare funcție de meniu, nu este nevoie să reeșalonăm fiecare dintre funcțiile pe care WordPress le are la dispoziție. În schimb, vom examina cele pe care le vom folosi și apoi vom lucra printr-un exemplu practic de utilizare a acestora în munca noastră.
Înainte de a ne uita la fiecare funcție, să detaliem ce intenționăm să realizăm în următoarea fază a acestei serii:
Relativ simplu, nu? Pentru a face acest lucru, vom profita de următoarele două funcții:
add_menu_page
care este utilizat pentru introducerea elementelor de meniu de nivel superioradd_submenu_page
care este folosit pentru a introduce elemente de submeniu la meniurile de nivel superior.Vom analiza parametrii și utilizarea fiecărei funcții pe măsură ce le implementăm în tema noastră.
Rețineți că restul acestui articol se bazează pe această versiune a setării WordPress Sandbox. Dacă urmăriți împreună cu depozitul, asigurați-vă că îl verificați.
Primul lucru pe care vrem să-l facem este să introducem un meniu de nivel superior. Acest meniu va apărea direct sub meniul "Setări" din tabloul de bord WordPress și va servi două scopuri. Meniul trebuie:
Funcția are următoarele șapte argumente, primele cinci sunt necesare, ultimele două nu sunt:
titlul paginii
este textul care va fi redat în bara de titlu a browseruluimenu_title
este textul care va fi afișat pentru elementul de meniucapacitate
se referă la rolul pe care trebuie să îl aibă utilizatorul pentru a accesa acest meniumenu_slug
este o valoare unică care identifică acest meniu. De asemenea, submeniurile se înregistrează în acest meniu.FUNCTION_NAME
care se numește când se face clic pe meniu pentru afișarea paginii cu opțiuni.icon_url
este calea către pictograma pe care doriți să o afișați lângă elementul de meniu.poziţie
este locul în care meniul trebuie adăugat în raport cu celelalte meniuri din tabloul de bord WordPress.În lucrarea noastră, ne vom concentra doar pe primii cinci parametri. Vorbesc despre poziționarea meniului în concluzia acestui articol.
Pentru a începe, va trebui să introducem un apel către add_menu_page
funcţie. Conform Codexului WordPress, meniurile de administrare pot fi adăugate folosind admin_menu
cârlig. Anterior în această serie, am scris o funcție care adaugă opțiunile temei noastre la meniul "Aspect". Mai exact, am scris sandbox_example_theme_menu
:
"sandbox_example_theme_menu () add_theme_page ('Themebox', // Titlul care va fi afișat în fereastra browserului pentru această pagină. 'Themebox', // Textul care va fi afișat pentru acest element de meniu 'administrator', // tipul de utilizatori pot vedea acest element de meniu 'sandbox_theme_options', // ID-ul unic - adică, slug - pentru acest element de meniu 'sandbox_theme_display' // Numele funcției de apelat la redarea paginii acestui meniu); // end sandbox_example_theme_menu add_action ('admin_menu', 'sandbox_example_theme_menu');
Notați în codul de mai sus că această funcție a fost înregistrată cu admin_menu
cârlig, de asemenea. Trebuie să încercați întotdeauna să păstrați coerența logică a funcțiilor. Deoarece avem deja o funcție care înregistrează un meniu, care este înregistrat cu cârligul corespunzător și din moment ce introducem funcții similare, vom adăuga noi funcții de meniu la această funcție.
Adăugați următorul apel la add_menu_page
direct sub apelul de mai sus:
add_menu_page ('Themebox', // Valoarea folosită pentru a popula bara de titlu a browserului când pagina de meniu este activă 'Themebox', // Textul meniului din bara laterală a administratorului, 'What role are pentru a accesa meniul 'sandbox_theme_menu', // ID-ul folosit pentru a lega elementele submeniului în acest meniu 'sandbox_theme_display' // Funcția de apel invers utilizată pentru a reda acest meniu);
După cum puteți vedea, înregistrăm un meniu care va afișa "Themebox" în bara de titlu a browserului și în elementul de meniu. Expunem meniul numai administratorilor și le-am oferit meniului unicul ID al "sandbox_theme_parent_menu
"Vom folosi din nou acest parametru în secțiunea următoare.
Există un lucru important pe care trebuie să-l clarificăm: Observați că am trecut "sandbox_theme_display
"ca funcție care trebuie apelată când se face clic pe acest element de meniu. Amintiți-vă că în Partea 3 am introdus această funcție (și am îmbunătățit-o în Partea 5). Mai exact, este responsabil pentru redarea paginii cu opțiuni tematice cu file.
Prin trecerea acestui nume de funcție existent la add_menu_page
funcționează, profităm de codul pe care l-am scris deja și redăm o pagină de opțiuni implicită pentru elementul de meniu.
În acest moment, suntem gata să adăugăm submeniuri, dar înainte de a merge mai departe, asigurați-vă că funcția dvs. arată exact așa:
funcția sandbox_example_theme_menu () add_theme_page ("Tema sandbox", "Tema sandbox", "administrator", "sandbox_theme_options", "sandbox_theme_display"); add_menu_page ("Teme cu nisip", "Teme cu nisip", "administrator", "sandbox_theme_menu", "sandbox_theme_display"); // end sandbox_example_theme_menu
Submeniurile sunt foarte asemănătoare cu meniurile, cu excepția faptului că acestea "aparțin" unui meniu existent. API-ul pentru înregistrarea submeniurilor este relativ similar. Funcția acceptă șase argumente, primele cinci fiind necesare, ultima fiind opțională:
parent_slug
se referă la codul unic al elementului din meniul părinte. În cazul nostru, "sandbox_theme_menu
".titlul paginii
este textul care trebuie redat în bara de instrumente a browserului atunci când acest element de submeniu este activmenu_title
este textul pentru acest element submeniu actual din tabloul de bordcapacitate
este rolul pe care un utilizator trebuie să îl aibă pentru a accesa acest element din meniumenu_slug
este ID-ul unic pentru acest element de meniuFUNCTION_NAME
care se numește când se face clic pe meniu pentru afișarea paginii cu opțiuniFuncția este simplă. Avem două elemente de meniu pentru a le introduce - unul pentru "Opțiuni de afișare" și unul pentru "Opțiuni sociale".
Mai întâi, să introducem un element de submeniu pentru opțiunile de afișare. Adăugați următorul bloc de cod direct sub add_menu_page
sunați așa cum am definit mai sus:
add_submenu_page ('sandbox_theme_menu', // ID-ul paginii de meniu de nivel superior la care aparține acest submeniu 'Opțiuni de afișare', // Valoarea utilizată pentru a popula bara de titlu a browserului când pagina de meniu este activă 'Opțiuni afișare' // Eticheta acestui element de submeniu afișată în meniul 'administrator', // Ce roluri pot accesa acest element de submeniu 'sandbox_theme_display_options', // ID-ul folosit pentru a reprezenta acest element de submeniu 'sandbox_theme_display' // Funcția de apel invers utilizat pentru a face opțiunile pentru acest element de submeniu);
Fiecare dintre parametrii de mai sus ar trebui să fie clar, cu excepția numelui funcției pe care am trecut-o ca argument final. Observați că este același nume de funcție pe care l-am furnizat în add_menu_page
apel. Dar asta are sens, nu? La urma urmei, opțiunea "Opțiuni de afișare" este fila implicită care este afișată atunci când sunt selectate opțiunile pentru temă, astfel încât să se înțeleagă că ar trebui redată atunci când este selectat meniul de nivel superior și când este selectat elementul de meniu "Opțiuni de afișare".
În acest moment, există o caracteristică importantă a WordPress pentru a evidenția: Rețineți că, odată ce ați adăugat primul dvs. submeniu, WordPress va face efectiv două elemente de submeniu în meniul de nivel superior - un element care duplică funcția de nivel superior meniu și un element care corespunde elementului de submeniu pe care tocmai l-ați definit. Aduc asta, deoarece, din experiența mea, am văzut dezvoltatorii care se confundă cu cum (și de ce) se întâmplă acest lucru. Scurt este faptul că WordPress face acest lucru - nu este nimic în neregulă cu codul dvs..
Adăugarea unui element de meniu pentru opțiunile sociale este aproape exact ca adăugarea unui element de meniu pentru opțiunile de afișare. Desigur, dorim doar să modificăm valorile pentru bara de titlu, elementul de meniu și pagina care este afișată ori de câte ori este selectat meniul. Mai întâi, să stabilim apelul nostru către add_submenu_page
funcţie. Ar trebui să arate astfel:
add_submenu_page ("sandbox_theme", "Opțiuni sociale", "Opțiuni sociale", "administrator", "sandbox_theme_social_options", "sandbox_theme_display");
Salvați codul, actualizați tabloul de bord și ar trebui să vedeți elementul de meniu "Opțiuni sociale", disponibil acum în meniul "Temă de tip sandbox"; totuși, observați că făcând clic pe noul element al submeniului face doar opțiunile "Opțiuni de afișare". Din moment ce am trecut "sandbox_theme_display
"ca nume de funcții, asta ar trebui să ne așteptăm, nu-i așa? Deci, acum ne confruntăm cu o provocare: Cum selectăm fila" Opțiuni sociale "când faceți clic pe elementul de submeniu?
Există câteva opțiuni diferite pe care le avem pentru legarea noului element de submeniu la fila corespunzătoare de pe pagina opțiunilor temei:
sandbox_theme_display
pentru a accepta un parametru opțional și apoi utilizați o funcție anonimă în add_submenu_page
apel pentru a trece un parametru la acesta.În cele din urmă, oricare dintre aceste opțiuni depinde de dvs.; cu toate acestea, aș prefera să refactor funcția mea existentă decât duplicat cod, astfel că asta e ceea ce voi face în restul acestui articol.
În primul rând, să începem să ne refacem sandbox_theme_display
funcţie. Să acceptăm un argument opțional care va fi folosit pentru a indica ce filă dorim să selectăm. Găsiți următoarea semnătură în memoria dvs. functions.php fişier:
function sandbox_theme_display () / * Consolidat pentru această parte a articolului. * / // end sandbox_theme_display
Actualizați semnătura astfel încât să accepte un singur argument și să o declare nulă atunci când nu este definită:
funcția sandbox_theme_display ($ active_tab = null) / * Consolidată pentru această parte a articolului. * / // end sandbox_theme_display
Dacă sunteți nou în PHP, puteți citi despre argumentele implicite în această pagină.
Rețineți din ultimul articol că funcția noastră de afișare caută într-adevăr o valoare de șir de interogare care să fie setată. Încă mai dorim să menținem acea funcționalitate, dar trebuie să ținem seama de faptul că parametrul poate fi trecut și în funcție. Pentru a efectua această refactorizare, mai întâi localizați următoarea linie de cod în sandbox_theme_display
funcţie:
$ activ_tab = isset ($ _GET ['tab'])? $ _GET ['fila']: 'display_options';
Observați că această linie specifică de cod se referă numai la parametrii șirului de interogare. Pentru a ține cont de noul parametru opțional, trebuie să introducem o logică care verifică mai întâi dacă parametrul șir de interogare este verificat, dacă nu, verifică dacă argumentul funcției este setat să afișeze opțiunile sociale și, dacă nu, atunci acesta va implicit opțiunile de afișare. Înlocuiți linia de cod de mai sus cu următoarea condiție:
dacă (isset ($ _GET ['tab'])) $ activ_tab = $ _GET ['tab']; altfel dacă ($ active_tab == 'social_options') $ active_tab = 'social_options'; altceva $ active_tab = 'display_options'; // sfârșit dacă / altceva
Versiunea finală a funcției ar trebui să arate astfel:
funcția sandbox_theme_display ($ active_tab = ") ?>Opțiuni Tematică pentru Opțiuni Sandbox
"> Opțiuni de afișare"> Opțiuni sociale
Încă nu am terminat. Deși am făcut munca necesară pentru a afișa opțiunile sociale dacă parametrul propriu-zis a fost trecut, nu am apelat efectiv funcția utilizând un parametru. Pentru a face acest lucru, trebuie să refactor
add_submenu_page
funcție de sus. În prezent, apelul funcției arată astfel:add_submenu_page ("sandbox_theme", "Opțiuni sociale", "Opțiuni sociale", "administrator", "sandbox_theme_social_options", "sandbox_theme_display");Trebuie să actualizăm parametrul final astfel încât acesta să apeleze funcția de afișare și să treacă valoarea potrivită pentru redarea opțiunilor sociale. Pentru a face acest lucru, vom crea o funcție anonimă:
add_submenu_page ('sandbox_theme_menu', 'Social Options', 'Social Options', 'administrator', 'sandbox_theme_social_options', create_function (null, 'sandbox_theme_display (' social_options ');));Dacă sunteți nou în PHP, asigurați-vă că ați citit-o pe
create_function
caracteristică și funcții anonime. Deși nu fac parte din acest articol, ele pot fi puternice (și utile!) Atunci când sunt utilizate în contextul potrivit.Versiunea finală a
sandbox_example_theme_menu
funcția ar trebui să fie după cum urmează:"sandbox_example_theme_menu () add_theme_page ('Themebox', // Titlul care va fi afișat în fereastra browserului pentru această pagină. 'Themebox', // Textul care va fi afișat pentru acest element de meniu 'administrator', // tipul de utilizatori pot vedea acest element de meniu 'sandbox_theme_options', // ID-ul unic - adică, slug - pentru acest element de meniu 'sandbox_theme_display' // Numele funcției de apelat la redarea paginii acestui meniu); add_menu_page ('Themebox', // Valoarea folosită pentru a popula bara de titlu a browserului când pagina de meniu este activă 'Themebox', // Textul meniului din bara laterală a administratorului, 'What role are pentru a accesa meniul 'sandbox_theme_menu', // ID-ul folosit pentru a lega elementele submeniului în acest meniu 'sandbox_theme_display' // Funcția de apel invers utilizată pentru a reda acest meniu); add_submenu_page ('sandbox_theme_menu', // ID-ul paginii de meniu de nivel superior la care aparține acest submeniu 'Opțiuni de afișare', // Valoarea utilizată pentru a popula bara de titlu a browserului când pagina de meniu este activă 'Opțiuni afișare' // Eticheta acestui element de submeniu afișată în meniul 'administrator', // Ce roluri pot accesa acest element de submeniu 'sandbox_theme_display_options', // ID-ul folosit pentru a reprezenta acest element de submeniu 'sandbox_theme_display' // Funcția de apel invers utilizat pentru a face opțiunile pentru acest element de submeniu); add_submenu_page ('sandbox_theme_menu', 'Social Options', 'Social Options', 'administrator', 'sandbox_theme_social_options', create_function (null, 'sandbox_theme_display (' social_options ');)); // end sandbox_example_theme_menu add_action ('admin_menu', 'sandbox_example_theme_menu');
Concluzie
În acest moment, tema noastră are acum propriul element de meniu de nivel superior cu fiecare dintre filele de setări accesibile prin intermediul elementelor de submeniu. Deși acest lucru este util, cred că este important să rețineți că există unele opinii mixte cu privire la introducerea meniurilor în tabloul de bord WordPress. Deși vă pot face munca mai proeminentă și mai accesibilă, ei pot interfera, de asemenea, cu meniurile WordPress existente sau cu alte lucrări terțe mai ales dacă încercați să plasați meniurile undeva folosind parametrul de poziție. Deși nu există nici un drept absolut sau absolut greșit atunci când vine vorba de introducerea de meniuri, gândiți-vă cu atenție la locul în care vă expuneți meniurile. Dacă un meniu WordPress existent are sens, înregistrați-vă munca ca submeniu.
În următoarea postare, vom începe să aruncăm o privire asupra diverselor elemente de intrare pe care le putem folosi pentru a introduce opțiuni în tema noastră WordPress, precum și despre modul de validare și dezinfectare a datelor înainte de a le serializa.
Surse conexe
add_menu_page
add_submenu_page
create_function