Gjennom hele denne serien har vi opprettet et plugin som har til hensikt å gi forfattere en måte å samle inn, administrere og lagre ideer og referanser til innhold som de oppretter innen WordPress.
Når vi gjør det, ser vi også måter vi kan organisere plugin på, slik at koden og filorganisasjonen er klar og vedlikeholdbar slik at når plugin fortsetter utvikling, kan vi enkelt legge til, fjerne og vedlikeholde dens egenskaper.
Frem til dette punktet har vi satt sammen den grunnleggende filorganisasjonen for pluginet, samt forenden, men vi har ikke faktisk implementert funksjonalitet for å lagre informasjon til databasen. Og hvis du ikke kan lagre informasjon, er pluginet liten for alle.
I dette innlegget skal vi hoppe tilbake til server-side-koden og begynne å implementere funksjonaliteten som vil:
Vi har fått vårt arbeid kuttet ut for oss. I denne artikkelen skal vi se på de to første trinnene og deretter i neste innlegg, ser vi på de to siste trinnene.
For å verifisere at brukeren har mulighet til å publisere for å lagre post-metadata, må vi implementere en sikkerhetskontroll under serialiseringsprosessen. For å gjøre dette må vi dra nytte av en nonce-verdi.
En nonce er et "nummer som brukes en gang" for å beskytte nettadresser og skjemaer fra å bli misbrukt.
For å introdusere en i meta-boksen, kan vi implementere funksjonaliteten i oppslaget som er ansvarlig for gjengivelsen av innleggsmalen. For å gjøre dette, last admin / synspunkter / forfatterne-kommentar-navigation.php
og oppdater malen slik at den inneholder et anrop til wp_nonce_field
:
Utkast til ressurser utgitt
I koden ovenfor har vi introdusert en nonce som tilsvarer handlingen av å redde forfatterens kommentar (som vi har kalt authors_commentary_nonce
) og tilknyttet den med en verdi som er identifisert av authors_commentary
.
Vi vil se hvor dette kommer til å spille i kort tid. For nå, hvis du laster inn nettleseren din, ser du ikke noe nytt skjermbilde. Det er fordi nonce-verdiene vises i et skjult felt.
For de som er nysgjerrige, kan du starte favorittbrowserens utviklingsverktøy, inspisere meta-boksen, og du bør finne noe som følger i oppslaget:
Selvfølgelig, den verdi
av din nonce vil være annerledes.
For å sikre at brukeren har tillatelse til å lagre innlegget, vil vi sjekke tre ting:
Vi skal skrive to hjelpefunksjoner for å oppnå første og tredje, og vi vil bruke noen innebygde funksjoner for å kontrollere nummer to (som faktisk vil bli brukt i den andre hjelperfunksjonen).
Først, la oss gå videre og sette opp kroken og funksjonen som vil bli brukt til å utnytte hjelpefunksjonene og lagre metadataene. I konstruktøren for Authors_Commentary_Meta_Box
, legg til følgende linje av kode:
Neste, la oss definere funksjonen. Merk at jeg ringer til to funksjoner i den følgende koden. Vi definerer dem kort tid:
is_valid_post_type () || ! $ this-> user_can_save ($ post_id, 'authors_commentary_nonce', 'authors_commentary_save')) return;
Gitt koden ovenfor, forteller vi at WordPress bringer vår lagre post
funksjon når det er lagre post
handling kalles. Inne i funksjonen sier vi "Hvis innlegget som blir lagret, ikke er en" post "posttype, eller hvis brukeren ikke har tillatelse til å lagre, avslutter du funksjonen."
Selvfølgelig må vi definere funksjonene slik at logikken fungerer. Først skal vi skrive is_valid_post_type
fungere som en privat
funksjon av dagens klasse. Det vil sjekke $ _POST
array for å sikre at posten som blir lagret, faktisk er et innlegg.
Deretter legger vi til
user_can_save
funksjon. Dette er funksjonen som vil sikre at innlegget ikke blir lagret av WordPress, og at hvis en bruker lagrer funksjonen, er nonce-verdien som er knyttet til ettervirkningen riktig satt.Legg merke til at vi passerer i
nonce_action
ognonce_id
som vi definerte i malen i første trinn. Vi bruker ogsåwp_verify_nonce
i forbindelse med nevnte informasjon.Slik kan vi bekrefte at innlegget som blir lagret, er gjort av en bruker som har riktig tilgang og tillatelser.
Sanitize dataene
Forutsatt at brukeren arbeider med en vanlig posttype og at han / hun har tillatelse til å lagre informasjon, må vi sanitere dataene.
For å gjøre dette må vi gjøre dette på følgende måte:
- Kontroller at ingen av informasjonen i post-metadataene er tom
- Strip våre alt som kan være farlig å skrive til databasen
Etter at vi har gjort dette, ser vi på å lagre informasjonen for hver av meta-boksene. Men først, la oss jobbe med sanitisering. Det er et par måter vi kan gå på å implementere dette. I forbindelse med dette innlegget vil vi gjøre det på den enkleste måten: Vi kontrollerer at informasjonen er basert på nøkkelen, og hvis den eksisterer, vil vi sanitere den.
For erfarne programmerere vil du sannsynligvis legge merke til at noen kode lukter med koden vi skal skrive. Senere i denne serien skal vi gjøre noen refactoring for å se hvordan vi kan gjøre plugin mer vedlikeholdsbar, så det er en del av intensjonen til dette innlegget.
Med det sagt, hopp tilbake til
lagre post
funksjon.1. Utkast
Siden den første kategorien som finnes i meta-boksen er utkast fan, vi starter med det. Legg merke til at det er en
textarea
, så logikken som eksisterer for å rense den informasjonen, bør være som følger:
Husk at textarea
heter Forfattere-kommentar-utkast
slik at vi kan få tilgang til den i $ _POST
array. For å oppnå dette, bruker vi følgende kode:
Enkelt sagt, vi sjekker for å se om informasjonen i
$ _POST
array er tomt. Hvis ikke, da vil vi sanitere dataene.2. Ressurser
Dette bestemte feltet er litt mer formet fordi det er dynamisk. Det vil si at brukeren kan ha alt fra null til mange inntastingsfelter som vi alle trenger å administrere. Husk at denne kategorien er utformet for å primært være for nettadresser, så vi må sørge for at vi på en sikker måte rydder opp informasjonen på den måten.
Først må vi gjøre en liten endring til
createInputElement
funksjon som eksisterer innenforadmin / eiendeler / JS / resources.js
fil. Spesielt må vi forsikre oss om at navnetattributtet bruker en matrise slik at vi kan få tilgang til det og lytte gjennom det når vi ser på$ _POST
data.Pass på at kodelinjene som er ansvarlige for å opprette selve elementet, ser slik ut:
// Deretter lager du det faktiske inputelementet og returnerer det til den som ringer $ inputElement = $ ('') .attr (' type ',' tekst ') .attr (' navn ',' authors-commentary-resources ['+ iInputCount +'] ') .attr (' id ',' authors-commentary-resource- ' + iInputCount) .attr ('verdi', ');Legg merke til at nøkkelen til det vi har gjort ligger i linjen som oppdaterer
Navn
. Spesielt plasserer vi antall inntastinger en indeks av arrayet.Neste, hopp tilbake til
lagre post
funksjon og legg til følgende kode (som vi diskuterer etter blokken):Fordi vi jobber med en rekke innganger, må vi først kontrollere at arrayet ikke er tomt. Hvis det ikke er det, må vi iterere gjennom det fordi vi ikke er sikre på hvor mange innganger vi skal klare.
Ligner på forrige blokk, gjør vi et grunnleggende nivå av sanitisering og rømming. Dette er noe du kan gjøre så aggressivt eller så avslappet som du vil. Vi kommer tilbake til dette betinget i neste innlegg når det er på tide å lagre dataene.
3. Publisert
Denne kategorien ligner på de forrige kategoriene fordi vi arbeider med et ubestemt antall elementer som vi trenger å sanitere. Dette betyr at vi trenger å lage en liten oppdatering til parten som er ansvarlig for å gjengi denne innspillingen.
På oppsiden håndterer vi bare en avkrysningsboks som har en boolsk verdi av å bli sjekket eller ikke (eller spesifikt 'på' eller tom) så det er veldig enkelt å vaske informasjonen.
La oss først oppdatere den delvise. Lokaliser
admin / synspunkter / partials / published.php
. Deretter finner du linjen som definererinngang
merk av i boksen og endre den slik at den ser slik ut:Legg merke til at vi har endret
Navn
Tilordne slik at den bruker en matrise med en indeks som verdi. Deretter hopper vi tilbake tillagre post
fungere en gang til for å introdusere validering på dette bestemte elementet:Akkurat som vi har gjort med de tidligere dataene, kontrollerer vi først for å se om innholdet eksisterer. I så fall sanererer vi det for å forberede det til å lagre. Hvis det ikke gjør det, gjør vi ingenting.
På å lagre
På dette tidspunktet er vi posisjonert for å ta de to siste punktene i serien:
- Lagring og gjenoppretting
- refactoring
Fra det neste innlegget går vi tilbake til koden vi har skrevet i dette innlegget, for å se hvordan vi kan lagre den i databasen og hente den fra databasen for å vise den på fronten.
Deretter fortsetter vi å refactoring. Tross alt er det en del av skrivbar vedlikeholdsbar kode som sørger for at den er velorganisert og lett forandringsbar. Siden koden vi jobber med på daglig basis, har allerede blitt skrevet og kan bli refactored, vi skal se hvordan du gjør det ved slutten av serien.
I mellomtiden vurdere koden ovenfor, sjekk kilden fra GitHub, og la noen spørsmål og kommentarer i feltet under.