Bilder per XML-RPC und PHP in WordPress hochladen

Nehmen wir an, Sie sind mit dem XML-RPC-Protokoll und seiner Funktionsweise, auch in WordPress, vertraut und haben es bereits verwendet. Hinzufügen von Beiträgen, Löschen von Seiten usw. Alles ist gut mit Text, aber was passiert, wenn Sie Dateien wie Bilder an WordPress senden möchten?

In diesem Tutorial werden wir einen einfachen Blick auf das Senden eines Bildes an WordPress werfen, damit es im Medienbereich des Admin-Bedienfelds angezeigt wird. Wir werden PHP zum Senden dieses Bildes verwenden, damit Sie diesen Code für ein WordPress-Plugin, ein Theme oder einfach nur für einfaches PHP verwenden können, genau wie in unserem Beispiel.


Schritt 1 Der Plan

Um nur eine allgemeine Vorstellung davon zu geben, was wir tun und wie wir es tun werden, werde ich dieses Tutorial mit einem Plan beginnen. Grundsätzlich werden wir ein PHP-Skript erstellen, das eine Datei (genauer gesagt ein JPEG-Bild) in eine lokale WordPress-Installation lädt.

Wir werden eine PHP-Bibliothek verwenden, die den XML-RPC-Client in PHP erstellt, die wir verwenden, um eine Verbindung zum WordPress XML-RPC-Server herzustellen und unsere Daten zu senden. Dieser Client ist eine PHP-Bibliothek mit dem Namen "Die Incutio XML-RPC-Bibliothek für PHP", die Sie unter scripts.incutio.com finden

Bitte beachten Sie: Dieses Beispiel dient nur zur Veranschaulichung dieses Tutorials und ist ein sehr einfaches und einfaches Beispiel


Schritt 2 Umgebung vorbereiten

Für dieses Tutorial benötigen Sie als erstes eine funktionierende Version von WordPress auf einem Apache-Server, auf dem PHP und MySQL installiert sind. Sie können dies auch vor Ort haben, was ich empfehle und ist eigentlich das Beispiel, das wir in diesem Tutorial verwenden werden.

Eine weitere Sache, die Sie benötigen, ist die XML-RPC-Bibliothek, die wir für dieses Lernprogramm verwenden. Die Bibliothek ist kostenlos unter einer BSD-Lizenz und kann unter scripts.incutio.com gefunden werden

Die Bibliothek ist eigentlich nur eine PHP-Datei mit dem Namen IXR_Library.php dass wir in diesem Tutorial verwenden werden. Als nächstes müssen Sie ein Verzeichnis in Ihrem erstellen htdocs (oder Webstammverzeichnis) Ordner Ihrer lokalen Serverinstallation, in den Sie den Ordner kopieren IXR_Library.php Datei und erstellen Sie auch eine index.php Datei daneben. Das index.php Die Datei muss vorerst leer sein.

Das wichtigste, was wir bei der WordPress-Installation tun müssen, ist die Aktivierung des XML-RPC-Dienstes. WordPress hat dies standardmäßig deaktiviert, so dass wir in die Einstellungen im Admin-Panel gehen und es aktivieren müssen. Um dies zu tun, gehen Sie zu die Einstellungen -> Schreiben und gerade unter dem Remote Publishing Im Titel finden Sie XML-RPC mit einem Kontrollkästchen direkt daneben, das standardmäßig deaktiviert ist. Wählen Sie es aus und klicken Sie auf "Änderungen speichern".

Jetzt können wir mit dem XML-RPC-Server kommunizieren, den WordPress eingebaut hat.


Schritt 3 Der Kodex, erklärt

Hier kommt der lustige Teil, also machen wir uns gleich an! Öffne das index.php zuvor erwähnte Datei mit Ihrem bevorzugten Code-Editor.

Einschließlich der Bibliothek

Als Erstes müssen wir die gerade heruntergeladene Bibliotheksdatei einfügen, damit wir sie später verwenden können. Also bearbeiten wir die index.php Datei und wir fügen den folgenden Code hinzu (vergessen Sie nicht, wie im Beispiel mit einem PHP-Tag zu beginnen):

 

Dies umfasst im Wesentlichen alles, was wir benötigen, damit unser Skript funktionieren kann. Kurz gesagt, wir werden den Client-Teil der Bibliothek verwenden, den wir gerade hinzugefügt haben. Wir werden das gleich tun.

Lesen des Bildes (JPEG-Datei)

Da wir ein Bild (eine JPG-Datei) an WordPress senden müssen, müssen wir es irgendwie senden. Die Lösung sendet es in einem Bit-Format. Genau wie Sie später sehen werden, fordert die XML-RPC-Serverfunktion dies an. Aber um es so zu senden, müssen wir den Inhalt in Bits umwandeln, und um dies zu tun, müssen wir den Inhalt abrufen. Die Datei (jede JPG-Bilddatei, wir nennen sie test.jpg), wird direkt neben der Datei platziert index.php Datei (im selben Verzeichnis) und in diesem nächsten Teil werden wir den Inhalt lesen und für die spätere Verwendung in einer Variablen speichern.

 $ myFile = "test.jpg"; $ fh = fopen ($ myFile, 'r'); $ fs = Dateigröße ($ myFile); $ theData = fread ($ fh, $ fs); fclose ($ fh);

Was der obige Code tut, erstellt zuerst eine neue Variable mit dem Namen $ myfile mit dem Zeichenfolgewert des Dateinamens, das, da es sich in demselben Ordner befindet, keine weiteren Pfadinformationen erfordert, nur den Namen, in diesem Fall, test.php.

Als nächstes müssen wir die Datei öffnen, also machen wir dies mit der PHP-Funktion fopen, dass wir mit dem ersten Parameter der vorherigen Variablen verwenden, $ myFile und der zweite Parameter eine andere Zeichenfolge, die die Operation angibt, die wir an der Datei vornehmen werden. Der Zeichenfolgewert von r meint lesen. Wir werden das Ergebnis der geöffneten Datei der Variablen hinzufügen $ fh.

Dann wird die Variable erstellt, da wir die Länge des Dateiinhalts benötigen $ fs mit dem von der PHP-Funktion zurückgegebenen Wert $ Dateigröße, Funktion, die den Parameter verwendet, $ myFile

Zum Schluss kommen wir zum Leseteil, wo wir die Variable angeben $ theData der Wert, der von der Funktion zurückgegeben wird, die das Lesen vornimmt, nämlich fread. Diese Funktion verwendet zwei Parameter, der erste ist die zuvor geöffnete Dateivariable ($ fh) und die zweite ist die zuvor eingestellte Dateigröße ($ fs).

Zuletzt schließen wir die geöffnete Datei mit der Funktion fclose und dessen Parameter $ fh. An dieser Stelle haben wir den Inhalt der JPG-Datei, die wir an den XML-RPC-Server von WordPress senden werden.

XML-RPC-Client erstellen

In diesem nächsten Teil werden wir die Bibliothek verwenden, die wir gerade importiert haben, um eine Verbindung zum XML-RPC-Server unserer WordPress-Installation herzustellen. Dazu benötigen wir die folgenden 3 Variablen:

  • $ usr (mit dem Benutzernamen des Admin-Panels), $ pwd(das Admin-Panel-Passwort) und
  • $ xmlrpc (der XML-RPC-Serverpfad). Beachten Sie, dass der XML-RPC-Serverpfad aus der Basis-Installations-URL von WordPress + besteht xmlprc.php Datei am Ende nach dem Schrägstrich.
 $ usr = 'admin'; $ pwd = 'admin'; $ xmlrpc = 'http: //localhost/wordpress/xmlrpc.php'; $ client = neuer IXR_Client ($ xmlrpc);

Als Nächstes müssen wir den Aufruf an den Server erstellen. Dazu verwenden wir die soeben erstellte URL-Zeichenfolge und die IXR_Client Klasse, die wir von der importierten Bibliotheksdatei erben. An diesem Punkt ist die Variable $ client ist als neuer Client für diesen Link deklariert, und alle Vorgänge werden mit diesem Link ausgeführt.

Dieser nächste Teil ist optional, aber für den Fall, dass Sie möchten, können Sie das Debugging wie folgt aktivieren:

 $ client-> debug = true;

Wenn Sie es aktivieren, erhalten Sie einen besseren Überblick darüber, was passiert, wenn etwas schief geht.

Platzieren der Daten an ihrem Platz

Bevor wir die Daten senden, müssen wir sie ordnungsgemäß organisieren und formatieren. Aufgrund der Art und Weise, wie wir sie senden müssen, müssen wir ein Array mit allen Werten erstellen. Nennen wir dieses Array $ params und gib folgende Werte an:

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

Zuerst müssen wir dem Arrayindexnamen den Namen geben Name der Wert von 'test.jpg, da dies der Name der Datei sein wird. Danach haben wir den Indexnamen Art, dass wir den Wert von geben image / jpg. Dies ist der Dateityp, den wir hochladen. Dann haben wir den Index benannt Bits das ist eigentlich die Datei, die wir senden müssen. Für die WordPress XML-RPC-API muss dieser Wert jetzt als 64-Bit-Basis gesendet werden. Um dies richtig zu machen, verwenden wir die Variable $ theData, Aber wir müssen es durch die Klasse laufen lassen IXR_Base64 so dass es entsprechend in codiert wird base64 Bits. Es ist sehr wichtig, dass die base64-Kodierung korrekt formatiert ist, damit die Datei bei der Anforderung erfolgreich an den Server gesendet werden kann. Es gibt verschiedene Base64-Kodierungen, und wenn die falsche verwendet wird, liegt unweigerlich ein Fehler vor. Das IXR_Base64 Die im obigen Beispiel verwendete Klasse konvertiert den Inhalt der Datei genau so, wie es der Server erfordert. Zuletzt der Indextyp überschreiben auf false gesetzt ist, gibt die Eigenschaft false die Option an, vorhandene Dateien mit demselben Namen zu überschreiben.

Senden der Daten über XML-RPC

Das letzte, was wir tun müssen, damit dieses Skript funktioniert, ist das Senden der Daten an WordPress, indem eine Anfrage von der aktiviert wird $ client Variable wie folgt:

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

Das $ res Variable erhält das Ergebnis von Abfrage Funktion aufgerufen aus dem $ client Variable, die die ursprünglich deklarierte und initiierte Implementierung eines XML-RPC-Clients darstellt. Grundsätzlich senden wir eine Anfrage an den Server. Der Server erhält eine Anfrage mit folgenden Parametern:

  • wp.uploadFile - die erforderliche Servicefunktion, die wir zum Hochladen der Datei aufrufen und verwenden
  • 1 - Die Blog-ID (jedes WordPress-Blog hat eine ID, der Standardwert ist 1)
  • $ usr - Die zuvor deklarierte Benutzername-Variable.
  • $ pwd - Die zuvor deklarierte Kennwortvariable.
  • $ params - Die Reihe von Parametern, über die wir gerade gesprochen haben.

Der vollständige Code

Der gesamte obige Code würde in etwa so aussehen:

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

Fazit

Es ist nicht schwer, einen solchen Client zu implementieren, aber da der Code, den Sie erstellen sollen, manchmal spezifisch ist, müssen Sie wissen, was Sie tun, damit Sie den gewünschten Effekt erzielen können. Die XML-RPC-Clientimplementierung in PHP für eine Anforderung eines WordPress-XML-RPC-Upload-Dateiservers ist ein solches Beispiel. Wenn die von Ihnen gesendeten Daten nicht ordnungsgemäß formatiert sind, werden sie möglicherweise nicht akzeptiert. Dieses Beispiel besteht nur aus wenigen Codezeilen, ist aber sehr spezifisch. Der gleiche Client kann für jede andere Art verwendet werden
Anforderung an WordPress unter Verwendung verschiedener XML-RPC-Anforderungsfunktionen mit den entsprechenden Parametern.