WordPress: Mit PHP und XML-RPC bloggen | 22/12/2009
WordPress stellt neben dem WordPress-Backend noch eine weitere Administrationsmöglichkeit zur Verfügung: das XML-RPC Interface. Es handelt sich hierbei um eine Schnittstelle, die die Kommunikation zwischen einer externen Anwendung und einem WordPress-Blog ermöglicht. Die Blogeditoren MarsEdit und Windows Live Writer machen beispielsweise davon Gebrauch.
Mit einfachen Mitteln kann man diese Schnittstelle auch mit einem PHP Script ansprechen. So lässt sich ein Blogeintrag hinzufügen oder bestehende Einträge auslesen und weiterverarbeiten. Freundlicherweise liefert WordPress eine fertige Klasse für den Zugriff gleich mit. Man muss diese also nur mit dem passenden Befehl füttern und bekommt das gewünschte Ergebnis zurück.
Im folgenden Beispiel beschreibe ich kurz wie man einen Beitrag verfasst und per XML-RPC übermittelt. Zuerst einmal muss man die Schnittstelle im Blog aktivieren. Dafür setzt man im WordPress-Backend unter Einstellungen → Schreiben einen Haken bei „WordPress, Movable Type, MetaWeblog und Blogger XML-RPC Schnittstelle aktivieren“.
Über den Befehl require() bindet man die XML-RPC Klasse aus dem WordPress-Unterverzeichnis wp-includes ein. Als Parameter wird die URL zur Schnittstellendatei an das erstellte Objekt übergeben. Die URL setzt sich aus der kompletten Adresse des Blogs und der Datei xmlrpc.php im Wurzelverzeichnis zusammen.
1 2 3 4 | <?php // Klasse für XML-RPC Schnittstelle einbinden und aufrufen require('./wordpress/wp-includes/class-IXR.php'); $rpc = new IXR_Client('http://example.com/wordpress/xmlrpc.php'); |
Über die Variable $post werden alle Daten des Beitrags übergeben. Tags werden durch Kommata getrennt, Kategorien müssen in einen Array.
5 6 7 8 9 10 11 12 | // das Post construct: // Metadaten $post['title'] = 'Beitragstitle'; $post['categories'] = array('Kategorie 1', 'Kategorie 2'); $post['mt_keywords'] = 'tag1, tag2, tag3'; // Posttext $post['description'] = 'Hier könnte Inhalt stehen'; |
Es können noch weitere Parameter mit der $post–Variable übergeben werden. Eine Auflistung ist im WordPress Codex zu finden. Der Inhalt darf natürlich über mehrere Zeilen gehen und mit HTML gestaltet werden.
Übermittelt werden die Daten über den Befehl query() der Klasse. Der Erste Parameter ist der Name der gewählten Methode. Die Blog ID ist in der Regel 1, Benutzername und Passwort müssen zu einem Benutzer passen, dem das Verfassen von Beiträgen gestattet ist. Als viertes wird die $post–Variable übergeben und zuletzt lässt sich steuern ob der Artikel veröffentlicht (true) oder als Entwurf (false) abgelegt werden soll.
13 14 15 16 17 18 19 20 21 | // query $status = $rpc->query( 'metaWeblog.newPost', // Methode 1, // Blog ID, in der Regel 1 'admin', // Benutzer 'password', // Passwort $post, // Post construct true // Veröffentlichen? ); |
Abschließend kann auf Erfolg geprüft werden und gegebenenfalls eine Fehlermeldung ausgegeben werden.
22 23 24 25 26 27 28 29 30 | // Ergebnis überprüfen und ggf. eine Fehlermeldung ausgeben if(!$status) { echo 'Error ('.$rpc->getErrorCode().'): '.$rpc->getErrorMessage(); exit; } // Sonst: ID des neuen Posts ausgeben echo 'New Post ID: '.$rpc->getResponse(); ?> |
Läuft alles fehlerfrei durch, wird die ID des neu erstellten Beitrags zurückgegeben. Mit dem fertigen Script kann man jetzt beispielsweise regelmäßig Inhalt von einer Seite abgreifen, aufbereiten und als Blogeintrag veröffentlichen. So lassen sich — cronjob vorausgesetzt — wöchentliche Linklisten von delicious erstellen.
Weiterführende Informationen
- xmlrpcexample.txt bitte in .php umbenennen
- Alle Methoden die WordPress versteht im WordPress Codex
- Allgemeinen Informationen über XML-RPC im WordPress Codex

Sie befinden sich im persönlichen Blog von Felix Triller. Näheres zu seiner Person finden Sie im Menüpunkt 









Vielen Dank für den hilfreichen Beitrag. Ich konnte leider im Wordpress Codex keine Informationen zu den weiteren $post Parametern finden. Könntest du mir vielleicht die URL sagen? Ich hab unter anderem auch hier nachgesehen: http://codex.wordpress.org/XML-RPC_wp
Bzw. gerade erst gesehen, du hast dort ja einen Link veröffentlicht: http://codex.wordpress.org/XML-RPC_wp#wp.newPage Dieser verweist zwar auf eine entsprechende Seite — aber die Angabe „categories“ ist dort z.B. nicht definiert.
Der Codex ist an dieser Stelle leider etwas dürftig. Ich habe Tags und Categories von irgendeiner anderen Seite, die ich damals ergoogelt habe. Der Rest sollte unter dem Link aufgeführt sein.
Google mal ach „metaWeblog.newPost“, da finden sich in einigen Foren noch weitere Felder. Im Codex ist halt leider nur die newPage angegeben und Seiten unterscheiden sich ja ein wenig von Posts.
Hi danke für deine Antwort. Konnte in Foren zwar einiges ähnliches finden. Mir hat aber nichts wirklich weitergeholfen. Die Doku ist hier echt miserabel. Ich hab es nun genau einmal so gemacht, wie du. Nur bekomm ich immer folgende Fehler Exception von meinem Wordpress XML RPC Server zurück „Error (403): Falsche Benutzer/Passwort-Kombination.“. Dabei habe ich die Daten mehrmals geprüft. Ps. Dein Webseitenurl ist fehlerhaft und somit hast du in fast jedem deiner Kommentare ein Link zu ner 404 Seite. Ein „l“ fehlt ;) .
Hab es nun soweit, dass alles funktioniert. Bei dem Passwort hatte mir der Firefox statt des I ein kleines L angezeigt. Wenn ich allerdings ein Veröffentlichungsdatum angeben will, kommt folgende Fehlermeldung: „Error (-32700): parse error. not well formed“. $post[’dateCreated’] = ‘2010 – 03-04′;. Ich verstehe nicht was der hat. Ist doch ISO 8601 konform… :(
Wie formatierst du denn das Datum? Ich glaube es muss in folgender Form sein: „2007 – 06-27 00:00:31″. Probier es auch mal mit „date_created_gmt“ als Key.
Und danke für den Hinweis mit der URL :)