Forstå Walker Class

Menyelementer, sider og (hierarkiske) taksonomier er alle eksempler på data med en treaktig struktur: vilkårene kan ha foreldre, barn og søsken. Vanligvis vil vi gjenspeile denne strukturen i HTML-oppslaget. For å vise en meny, for eksempel, vil vi at HTML-en skal ha en liste over "toppnivå" -koblinger, med nestede lister over sine barn, som selv inneholder nestede lister over sine barn, og så videre. Denne opplæringen vil lede deg gjennom en klasse WordPress gir som gjør at denne oppmerkningen blir ekstremt enkel.


Hva er Walker Class?

Walker-klassen er en abstrakt klasse designet for å hjelpe til med å krysse og vise elementer som har en hierarkisk struktur (eller tre). Det gjør egentlig ikke "gjør" (i den forstand at det genereres HTML) hva som helst. Det sporer bare hver gren av ditt tre: det må utvides av andre klasser som forteller det hva du skal gjøre for hvert element det kommer over. WordPress tilbyr sine egne utvidede klasser, for eksempel:

  • Walker_Nav_Menu - for visning av HTML for navigasjonsmenyer
  • Walker_Page - for å vise en liste over sider
  • Walker_Category - for å vise en liste over taksonomiske vilkår.

Hver av disse klassene utvider Walker-klassen ved bare å diktere hva klassen gir ut på hvert element og nivå av treet. For å de-mystify denne klassen skal vi se på de viktigste metodene og et par eksempler på hvordan du bruker den. Selve klassen finnes her.


Vandre på treet

gå ($ elementer, $ max_depth)

Walker-klassen blir sparket av med gå-metoden, og det er denne metoden som returnerer HTML-en gang den er blitt generert. Den aksepterer to argumenter:

  1. En rekke elementer som vi ønsker å vise, som vil ha en slags foreldre-barn forhold
  2. $ MAX_DEPTH - angir hvor mange generasjoner vi undersøker
  3. Ok 3 ... Hvis du kløser overflaten av denne metoden, finner du at du faktisk kan passere ekstra argumenter som blir samlet inn i en matrise: $ args. Dette går da videre til andre metoder i klassen

Gåmetoden utpeker elementene "toppnivå" - de uten foreldre - og plasserer dem i en gruppe. Resten, barna, er plassert i et andre array hvor nøkkelen er ID for foreldrene (det er et todimensjonalt utvalg som en forelder kan ha flere barn):

 $ children_elements = array ('1' => array () // Array av elementer som svarer til barn av 1, '4' => array () // Array of elements corresponding to children of 4);

Det løkker så gjennom hver av de overordnede elementene i sin tur og bruker metoden display_element.

Display_Element

display_element ($ element, & $ children_elements, $ max_depth, $ deep = 0, $ args og $ output)

Som navnet antyder display_element er ansvarlig for å vise et element i vårt tre. Faktisk kaller det flere funksjoner for å gjøre dette. Disse funksjonene er bevisst tomt i Walker-klassen - og det er disse som endres i de forlengende klassene, da de bestemmer den faktiske HTML returnerte. Disse inkluderer:

  • start_lvl - en funksjon for å returnere HTML for starten av et nytt nivå. Når det gjelder lister, vil dette være starten på en ny "underliste", og det ville være ansvarlig for å returnere
      stikkord
    • end_lvl - ringte når vi har avsluttet et nivå. I navigasjonsmenyeksemplet er denne funksjonen ansvarlig for å avslutte underlisten med en lukkeliste
  • start_el - funksjonen som er ansvarlig for visning av det nåværende elementet vi er på. Når det gjelder menyer, betyr dette
  • tag og elementets lenke.
  • end_el - funksjonen som kalles etter et element, og alle det er barn, har blitt vist. For menyeksemplet betyr dette at vi returnerer en avslutning
  • stikkord.

Så hva gjør display_element faktisk gjør? Det er faktisk hvor all den magiske Walker-klassen finner sted. Først kan vi se på hvilke argumenter den gir:

  • $ element - Dette er elementet vi for tiden er på på treet vårt
  • $ children_elements - en rekke av alle barnelementer (ikke bare barn av elementet som er nevnt ovenfor). Dette er den andre gruppen som er dannet i metode og nøklene er foreldrenes IDer.
  • $ MAX_DEPTH - hvor langt ned har vi lov til å utforske
  • $ dybde - hvor langt ned er vi for øyeblikket
  • $ args - valgfrie argumenter (nevnt tidligere)
  • $ utgang - HTML-koden hittil. Dette legges til når vi undersøker mer av treet.

De display_element Metode første samtaler start_el som er ansvarlig for å vise elementet. Nøyaktig hvordan det avhenger av konteksten. For en rullegardinmeny kan det være