Crearea navigării în bara laterală sensibilă la context în WordPress

Uneori am un job client care necesită un site construit în întregime pe pagini. Nu există interogări de bază de date fantezie, nici un fișier de șablon suplimentar - doar o grămadă de pagini într-o structură ierarhică.

Un site foarte mare, construit pe pagini, poate deveni dificil și confuz pentru utilizatori dacă navigarea nu este corectă, deci este util să furnizați o listă a tuturor paginilor din ramura curentă a ierarhiei paginii de pe fiecare pagină. 

De exemplu, dacă site-ul dvs. este pentru o organizație și fiecare dintre funcțiile organizației are o pagină de nivel superior cu subpagini pentru departamentele individuale, atunci veți dori să enumerați toate aceste departamente împreună cu un link către pagina de funcții de nivel superior. Veți dori să faceți acest lucru pe fiecare dintre aceste pagini departamentale și pe orice subpagini pe care le-ar putea avea, precum și cu pagina de nivel superior în sine.

Pentru a face acest lucru, nu veți putea scoate liste de conținut asociat prin rularea interogărilor la tipul curent de post sau termenul de taxonomie. În schimb, va trebui să identificați unde este pagina curentă în structură și apoi să afișați o listă de linkuri în consecință.

Aici vă vom arăta cum să faceți acest lucru, creând o funcție pe care o puteți adăuga la fișierul bara laterală sau poate deasupra conținutului din fișierele șablonului dvs. (sau activați printr-un cârlig dacă tema dvs. folosește aceste).

Aceasta constă din două etape:

  1. identificarea paginii curente în structură
  2. afișând o listă de pagini

Ce ai nevoie

Pentru a finaliza acest tutorial, veți avea nevoie de:

  • o instalare de WordPress
  • un editor de text

Crearea pluginului

Voi crea această funcție într-un plugin, astfel încât tema sa să fie independentă. Deci, primul pas este să creați un fișier de plugin. Mina este chemată tutsplus-list-subpages.php.

Deschideți fișierul plugin și adăugați următoarele:

Evident, codul dvs. va fi diferit, pe măsură ce autorul pluginului și adresa URL se vor schimba și este posibil să doriți să modificați descrierea. 

Includerea numelui funcției în descriere este utilă, deoarece înseamnă că atunci când instalați pluginul pe un site, nu este necesar să verificați codul pentru a vă reaminti cum să îl utilizați.

Identificarea paginii curente în ierarhie

Pentru a afla unde este pagina curentă în ierarhia paginilor, trebuie să faceți patru lucruri:

  1. Verificați dacă aceasta este de fapt o pagină
  2. Verificați dacă acest post are părinți
  3. Dacă nu, atunci știi că este strămoșul de nivel superior pentru această parte a ierarhiei
  4. Dacă da, trebuie să identificați strămoșul de nivel superior folosind get_post_ancestors ()

Deci hai sa o facem!

Creați o nouă funcție cu o etichetă condiționată în ea pentru a verifica dacă vă aflați pe o pagină:

Acum, în interiorul is_page () eticheta condiționată, începeți prin definirea $ postare variabilă globală:

Apoi trebuie să identificați dacă pagina curentă are părinți, pe care o utilizați dacă (& post-> post_parent):

post_parent) ?>

Dacă pagina are strămoși, trebuie să identificați cele mai multe dintre acestea, pe care le utilizați get_post_ancestors ():

post_parent) // preluați lista strămoșilor $ parents = array_reverse (get_post_ancestors ($ post-> ID)); // obțineți întoarcerea strămoșilor de nivel superior $ părinți [0]; ?>

Aceasta definește o nouă variabilă de $ parinti a cărui valoare este ID-ul paginii de top din ramura curentă a ierarhiei. Linia returnează $ părinți [0]; ieșiri care sunt valoroase, astfel încât să le puteți utiliza într-o funcție ulterioară.

În cele din urmă, trebuie să definiți ce se întâmplă dacă pagina curentă nu are părinți, adică dacă este chiar strămoșul cel mai de sus. În acest caz, doriți să ieșiți ID-ul paginii curente, astfel încât să adăugați următoarele funcții:

returnați $ post-> ID;

Întreaga dvs. funcție va arăta astfel:

post_parent) // preluați lista strămoșilor $ parents = array_reverse (get_post_ancestors ($ post-> ID)); // obțineți întoarcerea strămoșilor de nivel superior $ părinți [0];  // returnează id - acesta va fi cel mai de sus strămoș dacă există unul sau pagina curentă dacă nu va reveni $ post-> ID; ?>

Rezultatul unei liste de subpagini

Acum, când știți ID-ul paginii de sus din ramura curentă a ierarhiei, afișarea unei liste de subpagini este relativ simplă. Să utilizați get_pages () pentru a identifica paginile copil ale paginii ale căror coduri le-ați identificat. De asemenea, va trebui să trimiteți un link către pagina strămoșilor de la începutul listei.

Folosind list_pages () pentru a identifica subpaginile

Începeți prin a crea o funcție nouă cu un control că suntem pe o pagină:

Rețineți că dacă veți adăuga această funcție la dvs. page.php șablon, puteți lăsa verificarea afișării unei pagini.

Primul lucru pe care trebuie să îl faceți în interiorul acestei etichete condiționate este să trageți în ID-ul paginii pe care l-ați identificat în tutsplus_check_for_page_tree () funcția pe care o faceți cu această linie de cod:

$ ancestor = tutsplus_check_for_page_tree ();

Mai jos, definiți argumentele pentru get_pages () funcţie:

$ args = array ('child_of' => $ strămoș, 'adâncime' => '-1', 'title_li' => ",);

Să aruncăm o privire rapidă asupra argumentelor pe care le-am folosit:

  • 'child_of' => $ strămoș identifică acele pagini care sunt copii ai $ strămoș pagină
  • 'adâncime' => '-1' spune funcția să meargă la cât mai multe nivele din ierarhie ca și în site. Puteți schimba acest lucru dacă doriți doar să afișați unul sau două niveluri.
  • 'title_li' => " se asigură că ceea ce e de ieșire nu este înfășurat în nici o etichetă HTML - așa cum o voi adăuga mai târziu.

Apoi, trebuie să rulați list_pages () funcţie:

$ list_pages = get_pages ($ args);

Rezultatul listei de pagini

Acum că aveți paginile dvs., trebuie să le transmiteți cu link-uri. Pentru aceasta, verificați mai întâi acest lucru list_pages () nu a returnat o matrice goală:

dacă ($ list_pages) 

În cadrul acestei verificări, primul link este la pagina de nivel superior:

  • „>

Și apoi mai jos, mai întâi

  • element, dar încă în interiorul
      , folosește wp_list_pages () pentru a afișa o listă a paginilor înfășurate în hyperlink-uri către ele:

      wp_list_pages ($ args);

      Aceasta va afișa o listă a titlurilor de pagină ca link-uri.

      Întregul tău tutsplus_list_subpages () acum va arata astfel:

       $ ancestor, 'depth' => '-1', 'title_li' => ",); // setați o valoare pentru get_pages pentru a verifica dacă este gol $ list_pages = get_pages ($ args); // verificați dacă $ list_pages valori dacă ($ list_pages) / deschide o listă cu pagina strămoșului din partea de sus?> 
      • „>

      Activarea funcției

      Puteți activa funcția în unul din două moduri:

      • Sunând tutsplus_list_subpages () într-unul din fișierele șablon ale temei, cum ar fi sidebar.php fişier
      • Atasand-o cu un cârlig în tema ta.

      De exemplu, dacă tema dvs. are a tutsplus_sidebar cârlig în sidebar.php fișier, ați adăuga următoarele la dvs. functions.php fişier:

      rezumat

      Codul pe care l-am demonstrat vă permite să adăugați în mod automat o listă de pagini asemănătoare unei pagini oriunde în ierarhia site-ului dvs..

      Dacă o utilizați pentru site-urile client, va trebui să vă asigurați că clientul înțelege cum să creeze pagini în mod ierarhic, dar în afară de asta nu înseamnă că trebuie să se gândească deloc la asta.

      Dacă doriți să faceți codul și mai ușor de utilizat pentru clienți, puteți crea un widget (sau poate un scurtcod) pentru a afișa lista de pagini, dar acesta este un subiect pentru o altă zi!

      Cod