I den forrige delen av serien så vi på hvordan vi kan bruke WP REST API for å hente innhold fra serveren. Vi lærte å hente innhold for forskjellige ressurser, inkludert innlegg, postmeta, koder, kategorier, etc. Dette er en kraftig funksjon siden dette innholdet kan brukes hvor som helst innenfor eller utenfor WordPress.
Vi lærte også om ALTERNATIVER
be om at selvdokumenterer API-en ved å oppgi alle ruter, deres endepunkter og deres respektive argumenter. Dette reduserer behovet for å stole på en ekstern dokumentasjon for API og gjør at endringer kan oppdages ganske raskt hvis API-en er oppdatert eller endret.
Etter å ha sett på disse funksjonene, vil vi nå i den nåværende opplæringen fokusere vår oppmerksomhet på de tre andre operasjonene av CRUD, dvs. opprette, oppdatere og slette data ved hjelp av WP REST API.
I denne opplæringen vil vi:
Så la oss begynne med å analysere hvilke ressurser som støtter oppretting, oppdatering og sletting av metoder ved hjelp av WP REST API.
Før vi dykker rett inn i å lage og oppdatere data med WP REST API, må vi analysere hvilke ruter som støtter opprettelses- og oppdateringsmetoder. Vi gjør dette ved å sjekke ruter og fremgangsmåter
eiendom i sine endepunkter. Dette kan gjøres ved å sende en egen ALTERNATIVER
Be om individuelle ruter, men en mer praktisk måte er å sende en FÅ
forespørsel til / Wp-.json
indeksrute som vi gjorde i den forrige delen av serien.
Sende en FÅ
forespørsel til / Wp-.json
rute returnerer et objekt som inneholder alle ruter og deres endepunkter i ruter
eiendom.
Det er i disse individuelle rutene at vi kan sjekke om en bestemt ressurs støtter POST
, SETTE
, og SLETT
metoder. La oss begynne med å analysere innlegg ressurs.
De innlegg ressursen avslører data med følgende to ruter:
/ wp / v2 / innlegg / wp / v2 / innlegg / (? P[\ D] +)
Den første ruten peker på samlingen av postobjektet, og dens metode
Eiendommen er som følger:
"metoder": ["GET", "POST"],
Dette fremgangsmåter
eiendom viser at / innlegg
rutestøtter FÅ
og POST
metoder for henting og opprettelse av data henholdsvis.
For / innlegg / (? P
rute, som peker på en enkelt innlegg ressurs, fremgangsmåter
Eiendommen er som følger:
"metoder": ["GET", "POST", "PUT", "PATCH", "DELETE"],
Som det fremgår av ovennevnte kode, er / innlegg / (? P
ruten støtter FÅ
, POST
, SETTE
, LAPP
, og SLETT
fremgangsmåter.
Ved å undersøke begge rutene ovenfor kan vi konkludere med at / innlegg
ruten støtter ressursinnhenting og opprettelse. Og / innlegg / (? P
ruten støtter ressursinnhenting, samt oppdatering og sletting. Selv om det støtter POST
Metode, denne ruten støtter ikke ressursopprettelsen som vi vil se i et eksempel nedenfor.
Derfor kan ruter som peker på en enkelt ressurs ikke brukes til å skape innhold, selv om de støtter POST
metode. Dette er fordi, for disse ruter, den POST
, SETTE
, og LAPP
Metoder brukes til å oppdatere innhold i WP REST API.
For å konkludere denne delen, la oss oppsummere konseptene vi har lært her:
FÅ
, POST
, og SLETT
metoder ved å sende en ALTERNATIVER
be om.POST
metode.Etter å ha analysert forskjellige ruter, er vi nå klare til å lage innhold ved hjelp av WP REST API, og vi vil begynne med å utforske innlegg ressurs.
La oss lage et innlegg ved å sende en testforespørsel fra Postman eller en annen HTTP-klient. For å gjøre dette, brann opp HTTP-klienten din og send en POST
forespørsel til / innlegg
rute. Men før det, husk at ressursskaping, sletting og oppdatering krever godkjenning som bruker med edit_posts
rettigheter. Så vi vil bruke den grunnleggende autentiseringsmetoden som vi lærte i den andre delen av denne serien.
I utgangspunktet sender vi en tom forespørsel kropp sammen med forespørselen til testformål:
$ POST / wp / v2 / innlegg
Serveren vil returnere a 400 Ugyldig forespørsel feil siden de nødvendige argumentene manglet i forespørselslegemet. Følgende svar vil bli returnert av serveren:
Svaret sier at en av innhold
, tittel
, eller utdrag
er nødvendig for å opprette et innleggsobjekt. Disse argumentene kan sendes på forespørsel i forespørselslegemet på en av følgende tre måter:
Det er bare et spørsmål om valg å bruke noen av disse metodene, og vi vil se nærmere på dem senere i denne opplæringen. Men la oss nå bruke den første metoden for å lage et innlegg.
For å sende argumenter som et JSON-objekt i Postman, bytt til Kropp kategorien og velg rå radioknapp. Deretter velger du fra rullegardinmenyen til høyre JSON (søknad / json) alternativ. I tekstområdet nedenfor kan du legge til JSON-kroppen.
Foreløpig har denne JSON kroppen bare en eiendom for tittel
av innlegget.
Send forespørselen ved å klikke på Sende knapp. Hvis alt går bra, vil serveren returnere en 201 - Opprettet status med det nyopprettede postobjektet som svaret.
Standardstatus for dette nyopprettede innlegget er utkast
. Vi kan oppdatere status
, så vel som noen andre egenskaper, ved å sende en annen POST
, SETTE
, eller LAPP
be om. ID av posten returnert i mitt tilfelle er 232
, så jeg sender en forespørsel til følgende endepunkt:
$ POST / wp / v2 / innlegg / 232
Behandlingsorganet for å oppdatere status
og innhold
Eiendom ser slik ut:
"status": "publiser", "innhold": "Dette er innholdet i innlegget"
Etter at forespørselen er sendt, returnerer serveren a 200 - OK status, noe som betyr at innlegget har blitt oppdatert.
I eksemplet ovenfor kom vi over følgende tre argumenter for å opprette et innlegg:
tittel
status
innhold
Den komplette listen over støttede argumenter for å lage et innlegg kan hentes med en enkel ALTERNATIVER
be om følgende:
$ OPTIONS / wp / v2 / innlegg
Vi kan da sjekke args
eiendom i POST
metoden array.
Nå som vi har lært hvordan vi kan opprette og oppdatere et innlegg, la oss ta en titt på noen flere ressurser vi kan jobbe med.
Oppdatering: Arbeider med post og side meta i WP REST API krever nå et følgesvennplugin tilgjengelig på GitHub av WP REST API-teamet.
Post-meta kan opprettes ved å sende en POST
forespørsel til følgende rute:
/ WP / v2 / innlegg / (? P[\ D] +) / meta
Hvor (? P
er ID for foreldreposten. Jeg bruker IDen til innlegget vi opprettet i forrige seksjon, som er 232
.
På samme måte som hvordan vi sender en forespørsel om å opprette et innlegg, kan et JSON-objekt bestående av to egenskaper sendes for å lage et innleggsmetode. Disse to egenskapene er nøkkel
og verdi
.
"nøkkel": "navn", "verdi": "bilal"
Verdiene av nøkkel
og verdi
eiendommene er Navn
og Bilal
henholdsvis.
Send forespørselen, og serveren vil returnere a 201 - Opprettet statuskode, som viser at postmetaen er blitt opprettet. Det nyopprettede innleggmetaobjektet blir også returnert i svaret:
Vær oppmerksom på at når du skriver denne veiledningen, støtter WP REST API ikke heltallverdier for å opprette postmeta. Hvis vi prøver å sende en heltallverdi i JSON-objektet for å lage postmeta, a 400 Ugyldig forespørsel statuskode vil bli returnert av serveren.
"nøkkel": "verdi", "verdi": 12345
Legg merke til de manglende sitatene rundt verdien 12345
. Svaret som returneres, vil være som følger:
Så alt du sender sammen med forespørselen om å opprette postmeta, skal være i strengformat.
Så langt i denne opplæringen har vi brukt JSON-format i forespørselsorganet for å opprette og oppdatere ressurser. La oss se på alle alternativene som WP REST API gir for å lage og oppdatere data.
Den enkleste måten å sende data på forespørselen er å sende den som nettadresseparametere. Vurder følgende POST
forespørsel om å opprette et innlegg:
$ POST / wp / v2 / innlegg? Title = the + title & content = dette + er + det + innholdet
Ovennevnte forespørsel sender to parametere til serveren for tittel
og innhold
av innlegget.
Tilsvarende, for å lage postmeta for et innlegg som har en ID på 232
, vi bruker følgende POST
be om:
$ POST / wp / v2 / innlegg / 232 / meta? Nøkkel = navn og verdi = Bilal
Ovennevnte forespørsel vil opprette følgende meta-objekt:
Denne metoden passer best når parametrene er korte strenger, som i eksemplet ovenfor. Men da antallet parametere og lengden på verdiene øker, blir det vanskelig å administrere dem som nettadresseparametere.
Ved å bruke denne metoden tar vi argumenter som et nøkkel / verdi-par i et JSON-objekt for å sende dem sammen med forespørselen. Til nå har vi brukt Postman til å sende forespørsler til serveren. Vi skal nå se på hvordan vi kan implementere denne metoden ved hjelp av HTML og jQuery.
Vurder følgende enkle skjema som består av tre felt for tittel
, status
, og innhold
:
Når ovennevnte skjema er sendt, utføres følgende JavaScript-kode (jQuery):
var postForm = $ ('# post-form'); var jsonData = funksjon (form) var arrData = form.serializeArray (), objData = ; $ .each (arrData, funksjon (indeks, elem) objData [elem.name] = elem.value;); returnere JSON.stringify (objData); ; postForm.on ('submit', funksjon (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / innlegg' 'POST', data: jsonData (postform), crossDomain: true, contentType: 'application / json', førSend: funksjon (xhr) xhr.setRequestHeader ('Authorization', 'Basic brukernavn: passord');, suksess: funksjon (data) console.log (data);, feil: funksjon (feil) console.log (error);;;);
Ved innsending av ovennevnte skjema sender vi en AJAX forespørsel til / WP / v2 / innlegg
rute. De jsonData ()
Metoden aksepterer en jQuery-forekomst av HTML-skjemaet og konverterer dataene til JSON-format. Denne JSON-data brukes da i data
eiendom av $ .Ajax ()
metode. I tillegg stiller vi innholdstypen til application / json
ved å bruke innholdstype
eiendom.
Før du sender forespørselen, setter vi toppteksten for å inkludere Autorisasjon
header for bruk av den grunnleggende godkjenningsmetoden. Vi har allerede lært å sette opp og bruke den grunnleggende godkjenningsmetoden i den andre delen av denne serien.
Endelig sendes forespørselen til / WP / v2 / innlegg
rute, og et nytt innlegg er opprettet. Dette nyopprettede postobjektet returneres av serveren som svar, og vi logger det ganske enkelt inn i konsollen inne i suksess()
metode.
Eksemplet ovenfor viser bruk av JSON-format for å sende data langs forespørselen. Kilden til dette JSON-objektet kan være alt annet enn en HTML-skjema, avhengig av arkitekturen i søknaden din.
Vær oppmerksom på at for at ovennevnte kode skal fungere riktig, må du kanskje sette inn Tilgang-Control-La-topper
headerfelt for å inkludere Autorisasjon
og Innholdstype
verdier. Dette kan gjøres ved å legge til følgende kode i WordPress .htaccess fil:
Header sett Access-Control-Allow-Headers "Content-Type, Authorization"
La oss nå se på å sende data via HTML-skjemaer.
Den siste måten å sende data på forespørselen, er å bruke HTML-skjemaer. Disse skjemaene skal inneholde felt med Navn
Egenskap. De Navn
Attributtet tjener som et argumentnavn som tittel
, status
, innhold
, etc. Verdiene av disse feltene tjener som verdien av disse argumentene.
Vi kan bruke det samme HTML-skjemaet som ble opprettet i forrige eksempel, og bruk deretter følgende kode for å opprette et nytt innlegg:
var postForm = $ ('# post-form'); postForm.on ('submit', funksjon (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / innlegg' 'POST', data: postForm.serialize (), crossDomain: true, beforeSend: funksjon (xhr) xhr.setRequestHeader ('Authorization', 'Basic brukernavn: passord');, suksess: funksjon (data) konsoll. logg (data);););
Ovennevnte kode er den samme som forrige eksempel, bortsett fra at vi fjernet jsonData ()
metode og vi sender nå skjemadataene i strengformat ved hjelp av jQuery's serialiserer ()
metode. Den ovennevnte jQuery-koden bruker standardinnstillingen application / x-www-skjema-urlencoded
innholdstype som sender dataene i form av en gigantisk streng med argumenter adskilt av &
signere og deres verdier blir tildelt ved hjelp av =
skilt. Dette ligner noe på å sende data som nettadresseparametere, bortsett fra at det ikke avslører data. Dette er en effektiv måte å sende data hvis dataene inneholder bare alfanumeriske tegn.
For å sende binære (ikke-alfanumeriske) data bruker vi multipart / skjema-data
innholdstype. Denne metoden kan brukes hvis vi trenger å laste opp bilder eller andre filer ved hjelp av WP REST API.
For å sende skjemadata i Postman, kan du bytte til Kropp kategorien, og bruk deretter enten skjema-data eller x-www-skjema-urlencoded alternativ.
Argumenter kan da defineres i nøkkel / verdi par for å sende sammen forespørselen.
Detaljert informasjon om forskjellige formtyper finnes i W3C-spesifikasjonene.
multipart / skjema-data
InnholdstypeNå som vi har sett på x-www-skjema-urlencoded
formtype, som sender data i form av en streng, la oss begynne å utforske en mer avansert formkodingstype, dvs.. multipart / skjema-data
.
De multipart / skjema-data
innholdstype brukes når det gjelder binære data, og dermed kan den brukes til å laste opp bilder eller andre filtyper til serveren.
I det følgende eksemplet bruker vi et enkelt HTML-skjema som består av en inngangs [type =”file”]
og litt av jQuery å laste opp bilder til serveren ved hjelp av / Wp / v2 / media
rute.
Vurder følgende HTML-skjema:
Følgende JavaScript vil bli utført når ovennevnte skjema er sendt inn:
var imageForm = $ ('# image-form'), fileInput = $ ('# fil'), formData = ny FormData (); imageForm.on ('submit', funksjon (e) e.preventDefault (); formData.append ('fil', filInput [0] .files [0]); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / media ', metode:' POST ', data: formData, crossDomain: true, contentType: false, processData: false, beforeSend: funksjon (xhr) xhr.setRequestHeader 'Godkjenning', 'Grunnleggende brukernavn: passord');, suksess: funksjon (data) console.log (data);, feil: funksjon (feil) console.log (feil););) ;
Her får vi først en jQuery-forekomst av skjemaet og dets inngangsfelt. Deretter initialiserer vi en ny FormData
gjenstand. De FormData
grensesnitt gir en måte å konstruere et sett med skjemafelt med nøkkel / verdi par og bruker samme format som multipart / skjema-data
form kodingstype.
Når skjemaet er sendt, forhindrer vi innlevering ved å ringe .preventDefault ()
metode på hendelsesobjektet. Vi legger deretter til et nytt felt til formData
eksempel ved bruk av .føye ()
metode. De .føye ()
Metoden aksepterer to argumenter for Navn
og verdi
av feltet. WP REST API håndhever Navn
Attributtet til filinngangsfeltet skal være fil
. Derfor satte vi det første argumentet - den Navn
-å være fil
, og for det andre argumentet passerer vi en filblombobjekt ved å referere til inngangselementet.
Som standard gikk dataene inn i data
eiendom av jQuery.ajax ()
Metoden behandles til en spørringsstreng. Siden vi laster opp bildefiler her, ønsker vi ikke at det skal skje, og for det formålet setter vi inn processData
eiendom til falsk
. Vi satte også innholdstype
eiendom til falsk
å forhindre application / x-www-skjema-urlencoded
blir sendt som standard innholdstype til serveren.
Og endelig satte vi Autorisasjon
header for å autentisere oss selv som bruker med edit_posts
privilegier.
Pass på at du kjører det ovennevnte skriptet fra en server. Hvis alt går bra og filen lastes opp, returnerer serveren det nyopprettede medieobjektet.
Dette bildet kan da settes som et kjennetegnet bilde for et innlegg.
Etter å ha studert måter å opprette og oppdatere ressurser ved hjelp av WP REST API, kan vi se hvordan vi kan slette dem.
Slette data med WP REST API er like enkelt som å sende en SLETT
forespørsel til en bestemt ressurs.
Hvis vi trenger å slette et innlegg som har en ID på 10
, vi sender følgende SLETT
be om:
$ DELETE / wp / v2 / innlegg / 10
Dette vil flytte innlegget til søppel, men vil ikke slette det permanent. For permanent å slette et innlegg bruker vi makt
argument:
$ DELETE / wp / v2 / posts / 10? Force = true
Legg merke til at makt
argumentet kreves når en deling av en ressurs som ikke støtter papirkurven. Eksempler på slike ressurser er postmeta og media.
Når det er sagt, avslutter vi nåværende del av serien.
I denne lange opplæringen så vi på å lage, oppdatere og slette ulike typer ressurser ved hjelp av WP REST API. Vi lærte om forskjellige måter å sende data på forespørsel, inkludert å sende data som nettadresseparametere, i JSON-format, og ved å bruke skjemaer. På slutten av opplæringen lærte vi om å slette ressurser ved å sende en SLETT
be om.
I neste og siste utgave av serien vil vi lære om den interne strukturen til WP REST API og dens klasser. Vi vil også lære å utvide API for å modifisere serverresponser. Se deg i neste del av serien - hold deg innstilt ...