Wir kommen nun dazu, mit Hilfe unserer kleinen API einen WordPress-Artikel anzulegen.
Dazu müssen wir uns kurz mit den internen Funktionen beschäftigen, die WordPress für dieses Unterfangen zur Verfügung stellt.
Es ist zunächst die Funktion „wp_insert_post„.
wp_insert_post( array $postarr, bool $wp_error = false )
Mit ihrer Hilfe kann man Artikel (oder auch Seiten) anlegen und bearbeiten.
Es gibt viele Parameter. Wir betrachten zunächst die wichtigsten:
- post_content – der Inhalt des Artikels
- post_title – die Überschrift des Artikels
- post_status – der Status des Artikels und
Stellen wir uns ein simples Array zusammen:
$postarr => array(
'post_content' => '<p>Das ist ein <b>Test äöüß</b><br>Und noch eine Zeile</p>',
'post_title' => 'Meine erste Überschrift',
'post_status' => 'publish'
)
Die Werte sollten sich von selbst erklären. Ich empfehle, wenn immer möglich beim Testen Umlaute zu nutzen, um später keine bösen Überraschungen zu erleben.
Ich setze „post_status“ auf „publish„, da ich die Artikel sofort veröffentliche. Wer aber noch händisch nachkontrollieren oder erstmal sichergehen möchte, der setzt „post_status“ auf „draft„.
Der neue Client
Der Client muss entsprechend angepasst werden.
<?php
$username='mueller';
$password='geheim';
$serverurl='http://domain.tld/maschine/';
$postdata_array=array(
'function' => 'wp_insert_post',
'wp_post_array' => array(
'post_content' => '<p>Das ist ein <b>Test äöüß</b><br>Und noch eine Zeile</p>',
'post_title' => 'Meine erste Überschrift',
'post_status' => 'publish'
)
);
$postdata = http_build_query(
array(
'postdata_string' => serialize($postdata_array)
)
);
$auth = base64_encode($username.':'.$password);
$header = array("Authorization: Basic $auth",
'Content-type: application/x-www-form-urlencoded'
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => $header,
'content' => $postdata,
'timeout' => 5000, //5 Sekunden
)
);
$context = stream_context_create($opts);
$result = file_get_contents($serverurl, false, $context);
header('Content-Type: text/html; charset=utf-8');
print $result;
exit();
?>
Der Aufbau hat sich nicht sehr gegenüber Teil 1 verändert.
Der neue Server
Beim Server hat sich ein wenig mehr getan.
<?php
define('WP_USE_THEMES', false);
header('Content-Type: text/html; charset=utf-8');
if (count($_GET)>0) $postdata_array=unserialize(array_shift($_GET));
if (count($_POST)>0) $postdata_array=unserialize(array_shift($_POST));
require('../wp-load.php');
if ($postdata_array['function']=='wp_insert_post') {
print wp_insert_post($postdata_array['wp_post_array']);
}
exit();
Wir müssen nun die Verbindung unseres Servers zu WordPress herstellen. Das passiert ganz einfach durch die Zeile:
require('../wp-load.php');
Die Datei „wp-load.php“ die sich im Hauptverzeichnis des Blogs befindet, stellt automatisch alle Daten und Komponenten zur Verfügung, die wir für den Umgang mit WordPress benötigen.
Die Zeile:
define('WP_USE_THEMES', false);
Sorgt noch dafür, dass wir keine Komponenten laden, die lediglich für das Frontend des Blogs benötigt werden.
Der Rest dürfte sich von selbst erklären. Interessant ist Zeile 10, in der der eigentliche Befehl zum Anlegen ausgeführt wird und als Ergebnis die ID des neuen Artikels (WordPress-Jargon: Post) an den Client zurückgegeben wird. Diese ID ist wichtig und sollte irgendwo auf Seiten des Clients gespeichert werden, denn später werden wir sie benötigen, um Artikel zu korrigieren, zu löschen oder mit anderen Daten anzureichern. Die ID ist immer eindeutig und wird niemals doppelt vergeben.
Rufen wir den Client auf:
http://localhost/client.php
Das Ergebnis gibt uns die ID 4025 zurück.

Und schauen wir mal ins Backend des Blogs.

Voilà – Das ist unser Artikel.
Bis dahin war es noch nicht ganz so schwer. Bisher hatten wir nur die Pflicht, jetzt folgt die Kür. Im nächsten Teil werde ich zeigen, wie man dem Artikel auch ein Bild zuordnet.