I den tidigare delen av serien tittade vi på hur vi kan använda WP REST API för att hämta innehåll från servern. Vi lärde oss att hämta innehåll för olika resurser, inklusive inlägg, posta meta, taggar, kategorier etc. Det här är en kraftfull funktion eftersom det här innehållet kan användas var som helst inom eller utom WordPress.
Vi lärde oss också om ALTERNATIV
begära att själv dokumenterar API: n genom att lista alla rutter, deras slutpunkter och deras respektive argument. Detta minskar behovet av att förlita sig på en extern dokumentation för API: n och gör att ändringar kan upptäckas ganska snabbt om API: n har uppdaterats eller ändrats.
Efter att ha tittat på dessa funktioner kommer vi nu i den aktuella handledningen att fokusera vår uppmärksamhet på de andra tre operationerna hos CRUD, dvs skapa, uppdatera och radera data med hjälp av WP REST API.
I denna handledning kommer vi att
Så låt oss börja med att analysera vilka resurser som stödjer skapandet, uppdateringen och raderingen av metoderna med hjälp av WP REST API.
Innan vi dyker direkt in i att skapa och uppdatera data med WP REST API måste vi analysera vilka rutter som stödjer skapande och uppdateringsmetoder. Vi gör det genom att kolla rutorna och metoder
egendom i sina slutpunkter. Detta kan göras genom att skicka en separat ALTERNATIV
Förfrågan på enskilda vägar, men ett bekvämare sätt är att skicka en SKAFFA SIG
begäran till / Wp-json
indexväg som vi gjorde i den tidigare delen av serien.
Skickar en SKAFFA SIG
begäran till / Wp-json
rutt returnerar ett objekt som innehåller alla rutter och deras slutpunkter i rutan rutter
fast egendom.
Det är i dessa enskilda vägar att vi kan kontrollera om en specifik resurs stöder POSTA
, SÄTTA
, och RADERA
metoder. Låt oss börja med att analysera inlägg resurs.
De inlägg resursen exponerar data med följande två rutter:
/ wp / v2 / inlägg / wp / v2 / inlägg / (? P[\ D] ^)
Den första rutten pekar på samlingen av postobjektet och dess metod
fastigheten är enligt följande:
"metoder": ["GET", "POST"],
Detta metoder
egendom visar att / inlägg
ruttstöd SKAFFA SIG
och POSTA
metoder för att hämta respektive skapa data.
För / inlägg / (? P
rutt, vilket pekar på en enda inlägg resurs, metoder
fastigheten är enligt följande:
"metoder": ["GET", "POST", "PUT", "PATCH", "DELETE"],
Som framgår av ovanstående kod, / inlägg / (? P
rutt stöder SKAFFA SIG
, POSTA
, SÄTTA
, LAPPA
, och RADERA
metoder.
Genom att undersöka båda ovanstående linjer kan vi dra slutsatsen att / inlägg
Rutt stöder resurshämtning och skapande. Och den / inlägg / (? P
Rutt stöder resurshämtning samt uppdatering och radering. Fast det stöder POSTA
Metod, denna rutt stöder inte resursskapande som vi kommer att se i ett exempel nedan.
Därför kan rutter som pekar på en enda resurs inte användas för att skapa innehåll, även om de stöder POSTA
metod. Detta beror på, för dessa vägar, POSTA
, SÄTTA
, och LAPPA
metoder används för att uppdatera innehåll i WP REST API.
För att avsluta det här avsnittet, låt oss sammanfatta de begrepp vi har lärt oss här:
SKAFFA SIG
, POSTA
, och RADERA
metoder genom att skicka en ALTERNATIV
begäran.POSTA
metod.Efter att ha analyserat olika vägar är vi nu redo att skapa innehåll med hjälp av WP REST API, och vi börjar med att utforska inlägg resurs.
Låt oss skapa ett inlägg genom att skicka en testförfrågan från Postman eller någon annan HTTP-klient. För att göra detta ska du avfyra din HTTP-klient och skicka en POSTA
begäran till / inlägg
rutt. Men innan det, kom ihåg att resursskapande, radering och uppdatering kräver autentisering som användare med edit_posts
rättigheter. Så vi använder den grundläggande autentiseringsmetoden som vi lärde oss i den andra delen av serien.
Ursprungligen skickar vi en tom förfrågan till förfrågningsunderlaget:
$ POST / wp / v2 / inlägg
Servern kommer att returnera a 400 Dålig Förfrågan fel eftersom de begärda argumenten saknades i begäran. Följande svar kommer att returneras av servern:
Svaret säger att endera av innehåll
, titel
, eller utdrag
krävs för att skapa ett postobjekt. Dessa argument kan skickas längs begäran i förfrågan på något av följande tre sätt:
Det är bara en fråga om valet att använda någon av dessa metoder, och vi kommer att undersöka dem närmare senare i denna handledning. Men låt oss nu använda den första metoden för att skapa ett inlägg.
För att skicka argument som ett JSON-objekt i Postman, växla till Kropp fliken och välj rå Radio knapp. Sedan väljer du från menyn till höger JSON (ansökan / json) alternativ. I textområdet nedan kan du sedan lägga till JSON-kroppen.
För närvarande rymmer denna JSON-kropp endast en egenskap för titel
av posten.
Skicka förfrågan genom att klicka på Skicka knapp. Om allt går bra kommer servern att returnera en 201 - Skapat status med det nyskapade postobjektet som svaret.
Standardstatus för den här nya posten är förslag
. Vi kan uppdatera status
, liksom några andra egenskaper, genom att skicka en annan POSTA
, SÄTTA
, eller LAPPA
begäran. ID-numret för inlägget som returneras i mitt fall är 232
, så skickar jag en förfrågan till följande ändpunkt:
$ POST / wp / v2 / inlägg / 232
Förfrågan om att uppdatera status
och den innehåll
egendom ser så här ut:
"status": "publicera", "innehåll": "Detta är innehållet i inlägget"
Efter att ha skickat begäran kommer servern att returnera en 200 - OK status, vilket betyder att inlägget har uppdaterats framgångsrikt.
I exemplet ovan kom vi över följande tre argument för att skapa ett inlägg:
titel
status
innehåll
Den fullständiga listan över argument som stöds för att skapa ett inlägg kan hämtas med en enkel ALTERNATIV
begära följande:
$ OPTIONS / wp / v2 / inlägg
Vi kan då kolla args
egendom i POSTA
metodmatris.
Nu när vi har lärt oss hur vi kan skapa och uppdatera ett inlägg, låt oss ta en titt på några fler resurser vi kan arbeta med.
Uppdatering: Arbeta med post och sida meta i WP REST API kräver nu ett kompanion-plugin tillgängligt på GitHub av WP REST API-teamet.
Post meta kan skapas genom att skicka en POSTA
begära följande väg:
/ WP / V2 / tjänster / (? P[\ D] ^) / meta
Var (? P
är den ursprungliga postens ID Jag använder namnet på det inlägg som vi skapade i föregående avsnitt, vilket är 232
.
På samma sätt som hur vi skickar en begäran om att skapa ett postobjekt kan ett JSON-objekt bestående av två egenskaper skickas för att skapa en postmeta. Dessa två egenskaper är nyckel-
och värde
.
"nyckel": "namn", "värde": "Bilal"
Värdena för nyckel-
och värde
egenskaper är namn
och Bilal
respektive.
Skicka förfrågan och servern kommer att returnera a 201 - Skapat statuskod, som visar att postmeta har skapats framgångsrikt. Det nybildade postmetaobjektet kommer också att returneras i svaret:
Observera att WP REST API inte stöder heltal för att skapa postmeta vid skrivningstillfället. Om vi försöker skicka ett heltal i JSON-objektet för att skapa postmeta, a 400 Dålig Förfrågan statuskoden returneras av servern.
"nyckel": "värde", "värde": 12345
Notera de saknade citaten runt värdet 12345
. Svaret som returneras kommer att vara som följande:
Så vad du skickar längs begäran om att skapa postmeta borde vara i strängformat.
Hittills i denna handledning har vi använt JSON-format i begäran om att skapa och uppdatera resurser. Låt oss titta på alla alternativ som WP REST API tillhandahåller för att skapa och uppdatera data.
Det enklaste sättet att skicka data längs förfrågan är att skicka det som URL-parametrar. Tänk på följande POSTA
Begäran om att skapa ett inlägg:
$ POST / wp / v2 / inlägg? Title = the + title & content = detta + är + det + innehållet
Ovanstående förfrågan skickar två parametrar till servern för titel
och den innehåll
av posten.
På samma sätt, för att skapa postmeta för ett inlägg med ett ID på 232
, vi använder följande POSTA
begäran:
$ POST / wp / v2 / inlägg / 232 / meta? Nyckel = namn & värde = Bilal
Ovanstående förfrågan kommer att skapa följande metaobjekt:
Denna metod passar bäst när parametrarna är korta strängar, som i exemplet ovan. Men eftersom antalet parametrar och längden på deras värden ökar blir det svårt att hantera dem som URL-parametrar.
Med hjälp av denna metod tar vi argument som ett nyckel / värdepar i ett JSON-objekt för att skicka dem längs begäran. Hittills har vi använt Postman för att skicka förfrågningar till servern. Vi ska nu titta på hur vi kan implementera denna metod med hjälp av HTML och jQuery.
Tänk på följande enkla formulär som består av tre fält för titel
, status
, och den innehåll
:
När ovanstående formulär skickas, körs följande JavaScript-kod (jQuery):
var postForm = $ ('# post-form'); var jsonData = funktion (form) var arrData = form.serializeArray (), objData = ; $ .each (arrData, funktion (index, elem) objData [elem.name] = elem.value;); returnera JSON.stringify (objData); ; post-format.on ("Skicka", funktion (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / inlägg' "Post", data: jsonData (postform), crossDomain: true, contentType: 'application / json', föreSänd: funktion (xhr) xhr.setRequestHeader ('Authorization', 'Basic användarnamn: lösenord');, framgång: funktion (data) console.log (data);, fel: funktion (fel) console.log (error);););
Vid inlämning av ovanstående formulär skickar vi en AJAX-förfrågan till / Wp / v2 / inlägg
rutt. De jsonData ()
Metoden accepterar en jQuery-instans av HTML-formuläret och omvandlar data till JSON-format. Denna JSON-data används sedan i data
egenskapen hos $ .Ajax ()
metod. Dessutom ställer vi in innehållstypen till application / json
genom att använda innehållstyp
fast egendom.
Innan vi skickar begäran, ställer vi in rubriken för att inkludera Tillstånd
rubrik för att använda den grundläggande autentiseringsmetoden. Vi har redan lärt oss att konfigurera och använda den grundläggande autentiseringsmetoden i den andra delen av denna serie.
Slutligen skickas förfrågan till / Wp / v2 / inlägg
rutt och ett nytt inlägg skapas. Det här nya skapade postobjektet returneras av servern som svar och vi loggar det helt enkelt in i konsolen inuti Framgång()
metod.
Ovanstående exempel visar användningen av JSON-format för att skicka data längs begäran. Källan till det här JSON-objektet kan vara allt annat än en HTML-blankett, beroende på arkitekturen i din applikation.
Observera att för att ovanstående kod ska fungera korrekt måste du kanske ställa in Åtkomst-Control-allow-rubriker
rubrikfält för att inkludera Tillstånd
och Innehållstyp
värden. Detta kan göras genom att lägga till följande kod i din WordPress .htaccess fil:
Header set Access-Control-Allow-Headers "Innehållstyp, auktorisering"
Låt oss nu titta på att skicka data via HTML-formulär.
Det sista sättet att skicka data längs begäran är att använda HTML-formulär. Dessa formulär ska innehålla fält med namn
attribut. De namn
Attributet fungerar som ett argumentnamn som titel
, status
, innehåll
, etc. Värdena för dessa fält tjänar som värdet av dessa argument.
Vi kan använda samma HTML-form som skapades i föregående exempel och använd sedan följande kod för att skapa ett nytt inlägg:
var postForm = $ ('# post-form'); post-format.on ("Skicka", funktion (e) e.preventDefault (); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / inlägg' 'POST', data: postForm.serialize (), crossDomain: true, beforeSend: funktion (xhr) xhr.setRequestHeader ('Authorization', 'Basic användarnamn: lösenord');, framgång: funktion (data) konsol. logg (data);););
Ovanstående kod är densamma som föregående exempel, förutom att vi tog bort jsonData ()
metod och vi skickar nu formulärdata i strängformat med jQuery s serialisera ()
metod. Ovanstående jQuery-kod använder standardvärdet application / x-www-form-urlencoded
innehållstyp som skickar data i form av en jätte sträng med argument separerade av &
signera och deras värden tilldelas med hjälp av =
skylt. Detta liknar något som sänder data som URL-parametrar, förutom att det inte exponerar data. Detta är ett effektivt sätt att skicka data om data bara innehåller alfanumeriska tecken.
För att skicka binär (icke-alfanumerisk) data använder vi multipart / form-data
innehållstyp. Den här metoden kan användas om vi behöver ladda upp bilder eller andra filer med hjälp av WP REST API.
För att skicka formulärdata i Postman kan du växla till Kropp fliken och använd sedan antingen form-data eller x-www-form-urlencoded alternativ.
Argument kan sedan definieras i nyckel / värdepar för att skicka längs begäran.
Detaljerad information om olika formtyper finns i W3C-specifikationerna.
multipart / form-data
InnehållstypNu när vi har tittat på x-www-form-urlencoded
formtyp, som skickar data i form av en sträng, låt oss börja utforska en mer avancerad formkodningstyp, dvs. multipart / form-data
.
De multipart / form-data
innehållstyp används vid hantering av binär data och kan därför användas för att ladda upp bilder eller andra filtyper till servern.
I följande exempel använder vi en enkel HTML-form som består av en input [type =”fil”]
och lite jQuery att ladda upp bilder till servern med hjälp av / Wp / v2 / media
rutt.
Tänk på följande HTML-formulär:
Följande JavaScript kommer att utföras när formuläret ovan lämnas in:
var imageForm = $ ('# image-form'), fileInput = $ ('# fil'), formData = ny FormData (); imageForm.on ('submit', funktion (e) e.preventDefault (); formData.append ('fil', filInput [0] .files [0]); $ .ajax (url: 'http: // din-dev-server / wp-json / wp / v2 / media ", metod:" POST ", data: formData, crossDomain: true, contentType: false, processData: false, beforeSend: function (xhr) xhr.setRequestHeader 'Godkännande', 'Basic användarnamn: lösenord');, framgång: funktion (data) console.log (data);, fel: funktion (fel) console.log (error );;) ;
Här får vi först en jQuery-instans av formuläret och dess inmatningsfält. Då initierar vi ett nytt FormData
objekt. De FormData
gränssnittet ger ett sätt att konstruera en uppsättning formfält med nyckel / värdepar och använder samma format som multipart / form-data
formkodningstyp.
När formuläret lämnas in, förhindrar vi inlämningen genom att ringa .prevent ()
metod på händelseobjektet. Vi lägger sedan till ett nytt fält till formData
exempel med hjälp av .bifoga()
metod. De .bifoga()
Metoden accepterar två argument för namn
och den värde
av fältet. WP REST API verkställer namn
attributet för filinmatningsfältet att vara fil
. Därför ställde vi det första argumentet - den namn
-att vara fil
, och för det andra argumentet passerar vi ett filblobobjekt genom att hänvisa till ingångselementet.
Som standard skickades data till data
egenskapen hos jQuery.ajax ()
Metoden bearbetas till en frågesträng. Eftersom vi laddar upp bildfiler här vill vi inte att det ska hända, och för det ändamålet ställer vi in processData
egendom till falsk
. Vi ställer också in innehållstyp
egendom till falsk
att förebygga application / x-www-form-urlencoded
skickas som standard innehållstyp till servern.
Och slutligen sätter vi på Tillstånd
header för att autentisera oss som användare med edit_posts
privilegier.
Var noga med att köra ovanstående script från en server. Om allt går bra och filen laddas upp, returnerar servern det nyskapade medieobjektet.
Den här bilden kan sedan ställas in som en bild för en post.
När vi har tittat på sätt att skapa och uppdatera resurser med hjälp av WP REST API, låt oss se hur vi kan ta bort dem.
Att radera data med WP REST API är lika enkelt som att skicka en RADERA
begära en viss resurs.
Om vi behöver ta bort ett inlägg med ett ID på 10
, vi skickar följande RADERA
begäran:
$ DELETE / wp / v2 / inlägg / 10
Detta flyttar posten till papperskorgen men tar inte bort det permanent. För att permanent ta bort ett inlägg använder vi tvinga
argument:
$ DELETE / wp / v2 / inlägg / 10? Force = true
Observera att tvinga
argument krävs vid radering av en resurs som inte stöder skräp. Exempel på sådana resurser är postmeta och media.
Med detta sagt, avslutar vi nu den nuvarande delen av serien.
I den här långa handledningen såg vi på att skapa, uppdatera och ta bort olika typer av resurser med hjälp av WP REST API. Vi lärde oss om olika sätt att skicka data längs begäran, inklusive att skicka data som URL-parametrar, i JSON-format och genom att använda formulär. I slutet av handledningen lärde vi oss att radera resurser genom att skicka en RADERA
begäran.
I nästa och sista delen av serien lär vi oss om den interna strukturen för WP REST API och dess klasser. Vi kommer också att lära oss att förlänga API: n för att modifiera serverns svar. Se dig i nästa del av serien - håll dig uppdaterad ...