Foto's uploaden via XML-RPC en PHP naar WordPress

Laten we zeggen dat u bekend bent met het XML-RPC-protocol en hoe het werkt, zelfs in WordPress, en u het eerder hebt gebruikt. Berichten toevoegen, pagina's verwijderen, etc. Alles is goed met tekst, maar wat gebeurt er als je bestanden zoals afbeeldingen naar WordPress wilt verzenden?

In deze zelfstudie gaan we kijken naar een zeer eenvoudige manier om een ​​afbeelding naar WordPress te verzenden, zodat deze wordt weergegeven in het mediagedeelte van het beheerdersdashboard. We gaan PHP gebruiken om deze foto te verzenden, zodat je deze code kunt gebruiken voor een WordPress plug-in, thema of zelfs gewoon PHP, net als in ons voorbeeld.


Stap 1 Het plan

Om een ​​algemeen idee te geven van wat we gaan doen en hoe we het gaan doen, begin ik met deze tutorial met een plan. In principe gaan we een PHP-script maken dat een bestand uploadt (een jpeg-afbeelding om nauwkeuriger te zijn) naar een lokale WordPress-installatie.

We gaan een PHP-bibliotheek gebruiken die de XML-RPC-client in PHP maakt, die we gaan gebruiken om verbinding te maken met de WordPress XML-RPC-server en onze gegevens te verzenden. Deze client is een PHP-bibliotheek genaamd "The Incutio XML-RPC Library for PHP" en is te vinden op scripts.incutio.com

Houd er rekening mee dat: Dit voorbeeld is alleen voor demonstratiedoeleinden van deze zelfstudie en is een zeer eenvoudig en eenvoudig voorbeeld


Stap 2 De omgeving voorbereiden

Voor deze zelfstudie is het eerste wat u nodig heeft een werkende versie van WordPress op een Apache-server waarop PHP en MySQL zijn geïnstalleerd. Je kunt dit ook lokaal hebben, wat ik aanraad en is eigenlijk het voorbeeld dat we in deze zelfstudie gaan gebruiken.

Een ander ding dat je nodig hebt, is de XML-RPC-bibliotheek die we gebruiken voor deze tutorial. De bibliotheek is gratis, onder een BSD-licentie, en is te vinden op scripts.incutio.com

De bibliotheek is eigenlijk slechts een PHP-bestand met de naam IXR_Library.php die we gaan gebruiken in deze tutorial. Het volgende dat je moet doen, is om een ​​map in je te maken htdocs (of webroot) map van uw lokale serverinstallatie waar u de kopieert IXR_Library.php bestand en maak ook een index.php bestand ernaast. De index.php bestand moet nu leeg zijn.

Het belangrijkste dat we in de WordPress-installatie moeten doen, is het activeren van de XML-RPC-service. WordPress is standaard gedeactiveerd, dus we moeten naar de instellingen in het admin-paneel gaan en het activeren. Ga hiervoor naar instellingen -> schrift en net onder de Remote Publishing titel vind je XML-RPC met een selectievakje ernaast dat standaard gedeselecteerd is. Selecteer het en klik op Wijzigingen opslaan.

Nu kunnen we communiceren met de XML-RPC-server die WordPress heeft ingebouwd.


Stap 3 De code, uitgelegd

Hier komt het leuke gedeelte, dus laten we er maar aan beginnen! Open de index.php bestand eerder genoemd met uw favoriete code-editor.

Inclusief de bibliotheek

Het eerste dat we moeten doen is het bibliotheekbestand opnemen dat we zojuist hebben gedownload, zodat we het later kunnen gebruiken. Dus we bewerken de index.php bestand en we voegen de volgende code toe (vergeet niet om te beginnen met een PHP-tag zoals in het voorbeeld):

 

Dit zal in principe alles omvatten wat we nodig hebben om ons script te laten werken. In een notendop gebruiken we het clientgedeelte van de bibliotheek die we zojuist hebben opgenomen. We zullen dit in een oogwenk doen.

De afbeelding lezen (Jpeg-bestand)

Omdat we een afbeelding (een jpg-bestand) naar WordPress moeten sturen, moeten we het op de een of andere manier verzenden. De oplossing verzendt het in een bitsformaat, zoals u later zult zien, vraagt ​​de XML-RPC-serverfunctie ernaar. Maar om het zo te verzenden, moeten we de inhoud in bits omzetten, en daarvoor moeten we de inhoud ervan krijgen. Het bestand (elk jpg-afbeeldingbestand, we noemen het test.jpg), wordt direct naast de index.php bestand (in dezelfde map) en in dit volgende deel gaan we de inhoud ervan lezen en opslaan in een variabele voor later gebruik.

 $ myFile = "test.jpg"; $ fh = fopen ($ mijnBestand, 'r'); $ fs = bestandsgrootte ($ mijnbestand); $ theData = fread ($ fh, $ fs); fclose ($ fh);

Wat de bovenstaande code doet, maakt eerst een nieuwe variabele genaamd $ myfile met de reekswaarde van de naam van het bestand, dat, omdat het zich in dezelfde map bevindt, geen andere padinformatie nodig heeft, alleen de naam, in dit geval, test.php.

Vervolgens moeten we het bestand openen, dus we doen dit met de PHP-functie fopen, die we gebruiken met de eerste parameter van de vorige variabele, $ myFile en de tweede parameter een andere tekenreeks die de bewerking aangeeft die we in het bestand gaan uitvoeren. De tekenreekswaarde van r middelen lezing. We zullen het resultaat van het geopende bestand toevoegen aan de variabele $ fh.

Omdat we de lengte van de bestandsinhoud nodig hebben, maken we de variabele $ fs met de waarde geretourneerd door de PHP-functie $ bestandsgrootte, functie die de parameter gebruikt, $ myFile

Uiteindelijk komen we bij het leesgedeelte, waar we de variabele geven $ theData de waarde die wordt geretourneerd door de functie die de uitlezing doet, namelijk fread. Deze functie gebruikt twee parameters, de eerste is de eerder geopende bestandsvariabele ($ fh) en de tweede is de eerder ingestelde bestandsgrootte ($ fs).

Ten slotte sluiten we het geopende bestand met behulp van de functie fclose en zijn parameter $ fh. Op dit moment hebben we de inhoud van het jpg-bestand, dat we naar de XML-RPC-server van WordPress gaan verzenden.

De XML-RPC-client maken

In dit volgende deel gebruiken we de bibliotheek die we zojuist hebben geïmporteerd om verbinding te maken met de XML-RPC-server van onze WordPress-installatie. Om dit te doen hebben we de volgende 3 variabelen nodig:

  • $ usr (met de gebruikersnaam van het beheerderspaneel), $ pwd(het beheerderswachtwoord) en
  • $ xmlrpc (het XML-RPC serverpad). Let op, het XML-RPC serverpad is gemaakt van de basis WordPress installatie url + de xmlprc.php bestand aan het einde na de schuine streep.
 $ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = nieuwe IXR_Client ($ xmlrpc);

Vervolgens moeten we de oproep naar de server maken. Hiervoor gebruiken we de URL-reeks die we zojuist hebben gemaakt en de IXR_Client klasse die we erven van het geïmporteerde bibliotheekbestand. Op dit punt, de variabele $ client is gedeclareerd als een nieuwe client voor die link en alle bewerkingen zullen worden gedaan met behulp van het.

Dit volgende onderdeel is optioneel, maar voor het geval u dit wilt, kunt u het debuggen activeren zoals:

 $ client-> debug = true;

Als u het activeert, krijgt u een duidelijker beeld van wat er gebeurt als er iets misgaat.

De gegevens op zijn plaats plaatsen

Voordat we de gegevens verzenden, moeten we deze correct indelen en opmaken, en vanwege de manier waarop we deze gegevens moeten verzenden, moeten we een array maken met alle waarden. Laten we deze array een naam geven $ params en geef het de volgende waarden:

 $ params = array ('name' => 'test.jpg', 'type' => 'image / jpg', 'bits' => nieuwe IXR_Base64 ($ theData), 'overwrite' => false);

Eerst moeten we de arrayindexnaam van geven naam de waarde van 'test.jpg, omdat dit de naam van het bestand zal zijn. Daarna hebben we de indexnaam type, waar we de waarde van geven image / jpg. Dit is het bestandstype dat we uploaden. Dan hebben we de index met de naam stukjes dat is eigenlijk het bestand dat we moeten verzenden. Nu vereist WordPress XML-RPC API dat deze waarde wordt verzonden als 64-bits basis. Om dit correct te doen, zullen we de variabele gebruiken $ theData, maar we zullen het door de klas moeten halen IXR_Base64 zodat het overeenkomstig gecodeerd is base64 bits. Het is erg belangrijk dat de base64-codering correct is geformatteerd om ervoor te zorgen dat het bestand naar de server wordt verzonden zoals werd gevraagd. Er zijn verschillende Base64-coderingen en als de onjuiste code wordt gebruikt, is er onvermijdelijk een fout. De IXR_Base64 klasse die in het bovenstaande voorbeeld wordt gebruikt, is de inhoud van het bestand converteren zoals de server dat vereist. Ten slotte het indextype beschrijven is ingesteld op false en geeft de eigenschap false op voor de optie om bestaande bestanden met dezelfde naam te overschrijven.

De gegevens verzenden via XML-RPC

Het laatste wat we moeten doen om dit script te laten werken, is door de gegevens naar WordPress te verzenden door een verzoek van de server te activeren $ client variabele zoals zo:

 $ res = $ client-> query ('wp.uploadFile', 1, $ usr, $ pwd, $ params);

De $ res variabele wordt gegeven het resultaat van de vraag functie die vanuit de binnenkant wordt aangeroepen $ client variabele die de oorspronkelijk gedeclareerde en geïnitieerde XML-RPC-clientimplementatie vertegenwoordigt. In principe sturen we een verzoek naar de server. De server ontvangt een verzoek met de volgende parameters:

  • wp.uploadFile - de vereiste servicefunctie die we bellen en gebruiken om het bestand te uploaden
  • 1 - de blog-ID (elk WordPress-blog heeft een ID, de standaardinstelling is 1
  • $ usr - De gebruikersnaamvariabele die eerder is gedeclareerd.
  • $ pwd - De eerder opgegeven wachtwoordvariabele.
  • $ params - De reeks parameters waar we zojuist over gesproken hebben.

De volledige code

Alle bovenstaande code samen zou er ongeveer zo uitzien:

 debug = true; $ params = array ('name' => 'test.jpg', 'type' => 'image / jpg', 'bits' => nieuwe IXR_Base64 ($ theData), 'overwrite' => false); $ res = $ client-> query ('wp.uploadFile', 1, $ usr, $ pwd, $ params); ?>

Conclusie

Het is niet moeilijk om zo'n client te implementeren, maar omdat soms de code die je moet bouwen specifiek is, moet je weten wat je doet, zodat je het gewenste effect kunt bereiken. De XML-RPC-clientimplementatie in PHP voor een WordPress XML-RPC uploadserververzoek is zo'n voorbeeld. Als de gegevens die u verzendt, niet correct zijn opgemaakt, wordt deze mogelijk niet geaccepteerd. Dit voorbeeld is slechts een paar regels code, maar het is heel specifiek. Dezelfde client kan worden gebruikt om iets anders te maken
een verzoek indienen bij WordPress met behulp van verschillende XML-RPC-aanvraagfuncties met de juiste parameters.