Navnegrupper og autolading er ikke emner som vanligvis diskuteres når det gjelder å jobbe med WordPress-plugins.
Noen av dette har å gjøre med fellesskapet som er rundt det, noe av dette har å gjøre med versjoner av PHP som WordPress støtter, og noen av det har ganske enkelt å gjøre med det faktum at ikke mange mennesker snakker om det.
Og det er greit, i en grad.
Verken namespaces eller autoloading er emner som du absolutt trenger å bruke for å lage plugins. De kan imidlertid gi en bedre måte å organisere og strukturere koden din samt kutte ned på antall krever
, require_once
, inkludere
, eller include_once
uttalelser som pluginene dine bruker.
I denne serien skal vi se nærmere på hva PHP navneområder er, hvorfor de er fordelaktige, og hvordan de skal brukes. Deretter skal vi se på hvordan du bruker autoladere til å laste inn filene automatisk uten at du må laste dem manuelt i vår kode.
For å komme i gang, trenger du følgende verktøy:
Når du har alt dette på plass, la oss begynne å bygge et plugin. Vær oppmerksom på at hvis noen av de ovennevnte virker nye for deg, ikke nøl med å gå gjennom noen av mine tidligere opplæringsprogrammer på min profilside.
Videre kan du følge meg på bloggen min og / eller Twitter på @tommcfarlin hvor jeg snakker om programvareutvikling i sammenheng med WordPress.
Med det sagt, la oss komme i gang.
I denne serien skal vi bygge en enkel plugin først og fremst for å demonstrere hvordan namespaces og autoloading fungerer i PHP. Men for å gjøre det, hjelper det alltid å anvende konseptene på en praktisk måte.
Til det formål skal vi bygge et plugin som gjør det enkelt å laste inn stilark og JavaScript-stiler i pluginet vårt, og det viser en meta-boks som ber brukeren om et spørsmål for å hjelpe dem med å brainstorme noe om å blogge.
Nei, dette er ikke noe du sannsynligvis vil sende til WordPress Plugin Repository, og det er heller ikke noe du vil bruke utenfor denne spesielle demoen. Men husk, formålet med denne serien er å demonstrere hvordan navneområder og autoloading fungerer.
Og det er gjennom dette eksempelet at vi skal gjøre nettopp det.
Hvis du har fulgt noen av mine tidligere opplæringsprogrammer, vet du at en av tingene jeg liker å gjøre er å planlegge hva vi skal bygge før vi hopper inn i å skrive noen kode. Så for den første iterasjonen av dette pluginet, er dette det vi vet at vi skal gjøre:
Det virker rettferdig, ikke sant? Hvis ikke, ingen bekymringer. Jeg skal gå gjennom hele prosessen, komplett med kode, kommentarer, skjermbilder og forklaringer.
La oss komme i gang.
Fra begynnelsen vet vi at vi trenger en fil som fungerer som bootstrap for plugin. Vi vet også at vi trenger en katalog for administrativ funksjonalitet.
La oss gå videre og skape det nå:
Tydeligvis har vi en enkelt tom fil og en admin katalog. La oss gå videre og sette opp dette pluginet slik at det vises i sammenheng med WordPress Plugin-aktiveringsskjermbildet.
For å gjøre dette må vi legge til følgende kodenavn øverst i pluginfilen:
Da, når du navigerer til WordPress-plugin-siden i administrasjonsområdet, bør du se det vises i listen over programtillegg. Hvis du velger å aktivere det, skjer ingenting siden vi ikke har skrevet noen kode.
På dette tidspunktet kan vi gå videre og begynne å definere klassen som vil gjøre vår meta-boks på Legg til nytt innlegg side.
Legge til en meta-boks
Denne delen av opplæringen vil anta at du er litt kyndig i å lage metakasser. Hvis ikke, ikke nøl med å se gjennom konseptene i denne serien og deretter gå tilbake til denne delen en gang ferdig.
La oss først lage en fil som heter
klasse-meta-box-display.php
iadmin
katalog av plugin-modulen vår. Koden skal inneholde følgende. Husk å vurdere kommentarene for å sikre at du forstår alt som denne klassen er ansvarlig for.Fra koden ovenfor bør du være i stand til å fastslå at denne klassen vil være ansvarlig for å vise innholdet inne i meta-boksen. For nå har vi imidlertid bare det ekko en uttalelse for visningen.
Vi endrer dette senere i opplæringen.
Deretter må vi introdusere en klasse som representerer meta-boksen selv. Så opprett en
klasse-meta-box.php
fil iadmin
katalog av plugin-modulen vår. Her er koden for å gjøre akkurat det. Igjen, gjennomgå koden og så forklarer jeg hva som skjer under klassen:display = $ display; / ** * Registrerer denne meta-boksen med WordPress. * * Definerer en meta-boks som vil gi inspirerende spørsmål øverst * i sidepanelet på siden "Legg til ny post" for å hjelpe spørrebloggere med noe å skrive om når de begynner å lage et innlegg. * / offentlig funksjon init () add_meta_box ('tutsplus-post-questions', 'Inspiration Questions', array ($ this-> display, 'render'), 'post', 'side', 'high');Denne klassen opprettholder et enkelt attributt som er en referanse til skjermen. Dette betyr at denne klassen er ansvarlig for å definere meta-boksen (som i sin tur krever visningsobjektet for å gjøre meldingen).
Skjermen opprettholdes som en privat eiendom satt i konstruktøren. Meta-boksen er faktisk ikke definert til
i det
Metoden heter (som vi vil se i pluginens bootstrap senere i opplæringen).På dette punktet har vi alt vi trenger for å vise en rudimentær meta-boks på Legg til ny innleggsside. Men først må vi sette opp pluginets bootstrap.
I tidligere opplæringsoppgaver har jeg gjort dette mye, så jeg skal inkludere bare koden som kreves (siden jeg har definert overskriften ovenfor). Jeg har lagt til kommentarer, men jeg vil også sørge for å forklare hva som skjer etter koden.
Dette er spesielt relevant fordi vår autoloader vil til slutt negere behovet for noe av det du skal se.
i det();Først sørger vi for at denne filen ikke kan nås direkte, og den kan bare kjøres av WordPress selv.
Neste, vi
include_once
klassene vi har opprettet hittil. Deretter ordner viMeta_Box
og send det en forekomst avMeta_Box_Display
i sin konstruktør.Til slutt kaller vi
i det
metode som ligger iMeta_Box
klasse.Forutsatt at alt går bra, bør vi kunne aktivere pluginet og se meta-boksen på en Legg til nytt innlegg side (eller, virkelig, en Oppdater innlegg side, så vel).
På dette tidspunktet har vi et fungerende plugin, men det gjør egentlig ikke noe annet enn å lage en meta-boks og vise en streng tekst.
la oss i det minste få det til å vise noen inspirerende sitater og vise en tilfeldig en hver gang siden lastes inn.
Viser Inspirasjon Quotes
Først må vi finne en tekstfil med inspirasjons sitater. Heldigvis tilbyr Internett en overflod av disse som vi kan bruke i prosjektet vårt (og de er fritt tilgjengelige). For det formål har jeg opprettet en
data
underkatalog iadmin
som jeg bruker til å huse minquestions.txt
fil.Deretter skal vi lage en klasse som vil:
- Åpne filen.
- Les en tilfeldig linje i en streng.
- Lukk filen.
- Returner strengen til den som ringer.
La oss gå videre og lage den klassen nå. Fordi dette er et verktøy, og det skal brukes på administrativ side av pluginet, la oss lage en
util
underkatalog iadmin
. Neste, la oss lage en fil som heterklasse-spørsmålet-reader.php
.Vi angir koden for denne klassen i et øyeblikk, men går tilbake til pluginets bootstrap-fil og husk å inkludere filen. Den resulterende koden skal se slik ut:
Som du kan se, blir antall filer vi må inkludere manuelt, lenger. Tenk deg om vi jobbet på et stort plugin! Likevel kommer vi tilbake til dette senere i serien.
For nå, la oss få oppmerksomheten tilbake til spørreskjemaet. Koden for klassen skal se slik ut:
Åpne ($ filnavn); $ question = $ this-> get_random_question ($ file_handle, $ filnavn); $ this-> close ($ file_handle); returnere $ spørsmål; / ** * Åpner filen for å lese og returnerer ressursen til filen. * * @access private * @param string $ filnavn Stien til filen som inneholder spørsmålet. * @return ressurs En ressurs til filen. * / privat funksjon åpen ($ filnavn) return fopen ($ filnavn, 'r'); / ** * Lukker filen som ble lest. * * @access private * @param string $ file_handle Resursen til filen som ble lest. * / privat funksjon lukk ($ file_handle) fclose ($ file_handle); / ** * Åpner filen for å lese og returnerer ressursen til filen. * * @access private * @param string $ file_handle Resursen til filen som ble lest. * @param string $ filnavn Stien til filen som inneholder spørsmålet. * @return string $ question Spørsmålet som skal vises i meta-boksen. * / privat funksjon get_random_question ($ file_handle, $ filnavn) $ questions = fread ($ file_handle, filstørrelse ($ filnavn)); $ questions = explode ("\ n", $ spørsmål); // Se etter et spørsmål til en tom streng ikke lenger er returnert. $ spørsmål = $ spørsmål [rand (0, 75)]; mens (tomt ($ spørsmål)) $ question = $ questions [rand (0, 75)]; returnere $ spørsmål;Legg merke til at koden for dette er relativt enkel, men hvis du ikke er kjent med noen av de grunnleggende filoperasjonene i PHP, er det det vi gjør:
- Vi åpner filen ved hjelp av
fopen
, som vil gi oss en ressurs for å lese filen.- Deretter leser vi innholdet i filen og tar deretter hver linje av filen og skriver den til en indeks av en matrise.
- Etter det velger vi et tilfeldig tall fra en rekke spørsmål og returnerer den til metoden som kaller den. Hvis den returnerer en tom streng, ser vi igjen til et spørsmål er funnet.
- Så lukker vi ressursen til filen.
Til slutt, for å bruke denne klassen, trenger du bare å instantiere den, kjenne banen til en fil full av spørsmål, og ring deretter
get_question_from_file
metode.Merk: Denne klassen gjør ikke Gjør eventuelle feilhåndtering. Det er en standard praksis når du arbeider med filer. For eksempel, hva skal vi gjøre hvis filen ikke eksisterer? Hva skal vi gjøre hvis det ikke er formatert riktig, eller hva om vi ikke klarer å stenge ressursen?
Alle disse er gode spørsmål, men de er utenfor omfanget av denne opplæringen. All denne informasjonen finnes i PHP-håndboken (og kanskje noen andre opplæringsprogrammer over Envato Tuts + -nettverket).
For nå er vi imidlertid opptatt av å lese en fil som vi vet eksisterer, og vi er opptatt av å vise resultatene i en meta-boks.
Hva vi har så langt
På dette punktet kan vi begynne å sette alt sammen. Forutsatt at vi har gjort alt riktig, bør vi kunne passere en forekomst av
Question_Reader
tilMeta_Box_Display
, spør om et spørsmål, og vis det i meta-boksen.La oss først oppdatere bootstrap-filen:
i det();I koden ovenfor merker du at
Meta_Box_Display
aksepterer nå en forekomst av spørreskjemaet i sin konstruktør. Dette innebærer at vi må presentere en ny eiendom, som vi skal gjøre nå:question_reader = $ question_reader; / ** * Gir en enkelt streng i sammenheng med meta-boksen som denne * skjermen tilhører. * / public function render () $ file = dirname (__FILE__). '/Data/questions.txt'; $ question = $ this-> question_reader-> get_question_from_file ($ file); ekko wp_kses ($ spørsmål);Legg merke til at denne filen bruker banen til spørsmålene som filen ble lagt til i databiblioteket. Bortsett fra at banen er hardkodd, er denne klassen også avhengig av en forekomst av
Question_Reader
.For den demo som vi jobber med (nemlig navneområder og autolading), er det greit. I et fremtidig prosjekt ønsker vi at prosjektene har mindre kobling mellom seg selv. Kanskje dette vil være et emne for en fremtidig opplæring.
Den primære takeaway fra koden ovenfor, er imidlertid at
Meta_Box_Display
klassen kan nå vise et spørsmål til brukeren.Legg merke til bruken av
wp_kses
for å sanitisere dataene før det presenteres for brukeren.Forfriskende Legg til nytt innlegg siden skal presentere deg med et bilde som dette:
Og hvis du oppdaterer siden, kan du se nye spørsmål lastes inn.
Hvor går vi fra her?
Selvfølgelig har vi ennå ikke å håndtere temaene for navneområder og autolading, men det er greit! Det er viktig at vi legger grunnlaget for et plugin som ikke bruker dem. På den måten, når vi gjøre implementere dem, vi kan se fordelene de har.
Videre har vi fortsatt litt ekstra arbeid å gjøre: Vi må presentere JavaScript og CSS og en eiendomslaster. Dette vil tillate oss å få et enda bredere bilde av hvordan pakking av våre filer i navneområder er gunstig.
Husk at du kan finne alle mine tidligere opplæringsprogrammer på min profilside, og du kan følge meg på bloggen min eller på Twitter.
Som alltid, hvis du leter etter andre verktøy for å hjelpe deg med å bygge ut ditt voksende sett med verktøy for WordPress eller for eksempel kode for å studere og bli mer kjent med WordPress, ikke glem å se hva vi har tilgjengelig i Envato Marked.
Med det sagt, har vi en fungerende versjon av pluginet klar til nedlasting, og starter i neste opplæring i denne serien. Hvis du vil bruke koden i den ovennevnte opplæringen, ikke nøl med å prøve å gjøre det. Videre, gjerne stille spørsmål i kommentarene.
ressurser