Låt oss säga att du är bekant med XML-RPC-protokollet och hur det fungerar, även i WordPress, och du har använt det tidigare. Lägga till inlägg, ta bort sidor etc. Allt är bra med text men vad händer när du vill skicka filer som bilder till WordPress?
I den här handledningen ska vi titta på ett väldigt enkelt sätt att skicka en bild till WordPress så att den visas i mediasektionen på adminpanelen. Vi ska använda PHP för att skicka den här bilden, så att du kan använda den här koden för ett WordPress-plugin, tema eller till och med helt enkelt PHP, precis som i vårt exempel.
Bara för att ge en allmän uppfattning om vad vi ska göra och hur vi ska göra det, kommer jag att starta denna handledning med en plan. I grund och botten kommer vi att göra ett PHP-skript som laddar upp en fil (en jpeg-bild för att vara mer exakt) till en lokal WordPress-installation.
Vi ska använda ett PHP-bibliotek som skapar XML-RPC-klienten i PHP, som vi ska använda för att ansluta till WordPress XML-RPC-servern och skicka vår data. Denna klient är ett PHP-bibliotek som heter "Incutio XML-RPC-biblioteket för PHP" och kan hittas på scripts.incutio.com
Vänligen notera: Detta exempel är endast för demonstration av denna handledning och är ett mycket grundläggande och rakt framåtriktat exempel
För den här handledningen behöver du en fungerande version av WordPress på en Apache Server med PHP och MySQL. Du kan också ha detta lokalt, vilket jag rekommenderar och är faktiskt det exempel vi ska använda i denna handledning.
En annan sak du behöver är XML-RPC-biblioteket som vi använder för denna handledning. Biblioteket är gratis, under en BSD-licens, och finns på scripts.incutio.com
Biblioteket är egentligen bara en PHP-fil som heter IXR_Library.php som vi ska använda i denna handledning. Nästa sak du behöver göra är att skapa en katalog i din htdocs (eller webbrot) -mappen på din lokala serverinstallation där du ska kopiera IXR_Library.php fil och skapa även en index.php filen bredvid den. De index.php filen måste vara tom för nu.
Det viktigaste vi behöver göra i WordPress-installationen är att aktivera XML-RPC-tjänsten. WordPress har avaktiverat det som standard så vi måste gå in i inställningarna i admin panel och aktivera det. För att göra detta, gå till inställningar -> Skrift och strax under Fjärrpublicering titel hittar du XML-RPC med en kryssruta bredvid den som är avmarkerad som standard. Markera den och klicka på spara ändringar.
Nu kan vi kommunicera med XML-RPC-servern som WordPress har byggt in.
Här kommer den roliga delen så låt oss få rätt på det! Öppna index.php filen som nämnts tidigare med din favorit kodredigerare.
Det första vi behöver göra är att inkludera den biblioteksfil som vi just laddat ner så att vi kan använda den senare. Så vi redigerar index.php fil och vi lägger till följande kod (glöm inte att börja med en PHP-tagg som i exemplet):
Detta kommer i grund och botten att täcka allt som vi behöver använda för att vårt skript ska fungera. I ett nötskal, kommer vi att använda den klientdel av biblioteket som vi just inkluderat. Vi kommer att göra detta på ett ögonblick.
Eftersom vi behöver skicka en bild (en jpg-fil) till WordPress, måste vi skicka den på något sätt. Lösningen skickar den i ett bitformat, precis som du kommer att se senare, begär XML-RPC-serverns funktion det. Men för att skicka det så måste vi konvertera innehållet till bitar, och för att göra det behöver vi hämta innehållet. Filen (någon jpg-bildfil, vi kommer att namnet test.jpg) kommer att placeras intill index.php fil (i samma katalog) och i den här nästa delen ska vi läsa innehållet och lagra dem i en variabel för senare användning.
$ myFile = "test.jpg"; $ fh = fopen ($ myFile, 'r'); $ fs = file size ($ myFile); $ theData = fread ($ fh, $ fs); fclose ($ fh);
Vad ovanstående kod gör först skapar det en ny variabel som heter $ minfil
med strängvärdet av namnet på filen, eftersom det inte finns någon annan sökvägsinformation på grund av att den finns i samma mapp, bara namnet, i det här fallet, test.php.
Nästa måste vi öppna filen, så gör vi det med PHP-funktionen fopen
, som vi använder med den första parametern i föregående variabel, $ myFile
och den andra parametern en annan sträng som anger vilken operation vi ska göra på filen. Strängvärdet av r
betyder läsning. Vi lägger till resultatet av den öppnade filen i variabeln $ fh
.
Då, för att vi behöver filinnehållslängden, skapar vi variabeln $ fs
med det värde som returneras av PHP-funktionen $ filstorlek
, funktion som använder parametern, $ myFile
Slutligen kommer vi till läsdelen där vi ger variabeln $ theData
värdet returneras av funktionen som gör läsningen, nämligen fread
. Den här funktionen använder två parametrar, den första är den tidigare öppnade filvariabeln ($ fh
) och den andra är den tidigare inställda filstorleken ($ fs
).
Slutligen stänger vi den öppnade filen med funktionen fclose
och dess parameter $ fh
. Vid denna tidpunkt har vi innehållet i jpg-filen, som vi ska skicka till XML-RPC-servern av WordPress.
I den här nästa delen använder vi biblioteket som vi just importerat för att ansluta till vår WordPress installations XML-RPC-server. För att göra detta behöver vi följande 3 variabler:
$ usr
(med användarnamnet på adminpanelen), $ pwd
(administratörspanelens lösenord) och$ xmlrpc
(XML-RPC-serverns sökväg). Observera, XML-RPC-serverns sökväg är gjord av basen WordPress-installationsadressen + xmlprc.php filen i slutet efter snedstrecket.$ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = new IXR_Client ($ xmlrpc);
Nästa måste vi skapa samtalet till servern. Därför använder vi URL-strängen som vi just skapat och IXR_Client
klass som vi ärver från den importerade biblioteksfilen. Vid denna punkt, variabeln $ klient förklaras som en ny klient för den länken och alla operationer kommer att göras med hjälp av den.
Den här nästa delen är valfri, men bara om du vill kan du aktivera felsökning på följande sätt:
$ client-> debug = true;
Om du aktiverar det får du en tydligare bild av vad som händer om något går fel.
Innan vi skickar data måste vi organisera och formatera det ordentligt, och på grund av hur vi måste skicka det måste vi skapa en matris med alla värden. Låt oss namnge den här matrisen $ params och ge den följande värden:
$ params = array ('name' => 'test.jpg', 'typ' => 'image / jpg', 'bits' => ny IXR_Base64 ($ theData), 'overwrite' => false);
Först måste vi ge array index namn på namn värdet av 'test.jpg, eftersom det här kommer att vara namnet på filen. Därefter har vi indexnamnet typ
, som vi ger värdet av bild / jpg. Det här är filtypen som vi laddar upp. Då har vi indexet heter bitar Det är faktiskt den fil som vi behöver skicka. Nu kräver WordPress XML-RPC API att detta värde skickas som bas 64 bitar. För att göra det korrekt använder vi variabeln $ theData
, men vi måste springa igenom klassen IXR_Base64
så att den kodas i enlighet därmed base64
bitar. Det är mycket viktigt att bas64-kodningen är formaterad korrekt för att filen ska skickas till servern som den begärdes. Det finns olika Base64-kodningar och om den felaktiga används, kommer det oundvikligen att vara ett fel. De IXR_Base64
klass som används i ovanstående exempel är att konvertera innehållet i filen precis som servern kräver det. Slutligen, indextypen skriva över
är inställd på felaktigt, vilket ger egenskapen falsk till möjligheten att skriva över befintliga filer med samma namn.
Det sista vi behöver göra för att detta script ska fungera är att skicka data till WordPress genom att aktivera en begäran från $ klient
variabel som så:
$ res = $ client-> fråga ('wp.uploadFile', 1, $ usr, $ pwd, $ params);
De $ res
variabel ges resultatet av fråga
funktion som heter från insidan av $ klient
variabel som representerar den ursprungligen deklarerade och initierade XML-RPC-klientimplementeringen. I grund och botten skickar vi en förfrågan till servern. Servern kommer att få en förfrågan med följande parametrar:
wp.uploadFile
- Den nödvändiga servicefunktionen som vi ringer och använder för att ladda upp filen1
- blogg-id (varje WordPress-blogg har ett ID, standard är 1$ usr
- Användarnamnsvariabeln som tidigare angivits.$ pwd
- Lösenordsvariabeln som tidigare förklarats.$ params
- Den uppsättning parametrar som vi bara pratat om.Hela ovanstående kod sätts ihop skulle se något ut så här:
debug = true; $ params = array ('name' => 'test.jpg', 'typ' => 'image / jpg', 'bits' => ny IXR_Base64 ($ theData), 'overwrite' => false); $ res = $ client-> fråga ('wp.uploadFile', 1, $ usr, $ pwd, $ params); ?>
Det är inte svårt att genomföra en sådan klient, men eftersom det ibland är koden du ska bygga är specifik måste du veta vad du gör så att du kan uppnå önskad effekt. XML-RPC-klientimplementeringen i PHP för en WordPress XML-RPC-uppladdning av filserverförfrågan är ett sådant exempel. Om data som du skickar inte är korrekt formaterad kanske det inte accepteras. Detta exempel är bara några rader kod men det är väldigt specifikt. Samma klient kan användas för att göra någon annan typ av
Be om att WordPress använder olika XML-RPC-förfrågningsfunktioner med lämpliga parametrar.