Wir wissen jetzt, wie wir mit Hilfe unserer kleinen API einen Artikel anlegen und wie wir ihn mit einem Bild versorgen. Nun fügen wir einige Metadaten hinzu. Dazu benötigen wird die Funktion „add_post_meta„. Diese verlangt folgende Parameter:
- post_id – Die eindeutige Artikel-ID aus Teil 2
- meta_key – Der Name des Metadaten-Feldes
- meta_value – Der Wert des Metadaten-Feldes
Wir packen also wieder einen Befehlsaufruf für unseren Server zusammen:
$postdata_array=array( 'function' => 'add_post_meta', 'post_id' => $parent_post_id, 'meta_key' => 'Geschmack', 'meta_value' => 'sauer' );
Und natürlich müssen wir auch unseren Server wieder ein wenig ergänzen.
if ($postdata_array['function']=='add_post_meta') { print add_post_meta($postdata_array['post_id'], $postdata_array['meta_key'], $postdata_array['meta_value']); }
Diese 3 Zeilen erweitern unseren Server um die Fähigkeit, mit Hilfe der Funktion „add_post_meta“ Artikel mit beliebigen Metadaten zu versorgen.
Und so sieht dann das neue benutzerdefinierte Feld aus.
Zusammenfassung
Server
<?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']); } if ($postdata_array['function']=='wp_insert_attachment') { $filetype = wp_check_filetype( basename( $postdata_array['file'] ), null ); $wp_upload_dir = wp_upload_dir(); $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . basename( $postdata_array['file']), 'post_mime_type' => $filetype['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $postdata_array['file'] ) ), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $postdata_array['file'], $postdata_array['parent_post_id'] ); require_once( ABSPATH . 'wp-admin/includes/image.php' ); $attach_data = wp_generate_attachment_metadata( $attach_id, $postdata_array['file'] ); wp_update_attachment_metadata( $attach_id, $attach_data ); set_post_thumbnail( $postdata_array['parent_post_id'], $attach_id ); } if ($postdata_array['function']=='add_post_meta') { print add_post_meta($postdata_array['post_id'], $postdata_array['meta_key'], $postdata_array['meta_value']); } exit(); ?>
Client
<?php function call_server($postdata_array) { $username='mueller'; $password='geheim'; $serverurl='http://domain.tld/maschine/'; $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); return file_get_contents($serverurl, false, $context); } $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', 'post_category' => null ) ); $parent_post_id = call_server($postdata_array); # FTP Upload des Bildes $ftp_server='domain.tld'; $ftp_user='john'; $ftp_password='secret007'; $remote_folder='/var/www/domain.tld/wp-content/uploads/maschine/'; $local_folder='/var/upload/bilder/'; $file_name='bild.jpg'; $conn_id = ftp_connect($ftp_server); ftp_login($conn_id, $ftp_user, $ftp_password); ftp_put($conn_id, $remote_folder.$file_name, $local_folder.$file_name, FTP_BINARY); ftp_close($conn_id); $postdata_array=array( 'function' => 'wp_insert_attachment', 'file' => $remote_folder.$file_name, 'parent_post_id' => $parent_post_id ); print call_server($postdata_array); # Metadaten hinzufügen $postdata_array=array( 'function' => 'add_post_meta', 'post_id' => $parent_post_id, 'meta_key' => 'Geschmack', 'meta_value' => 'sauer' ); call_server($postdata_array); exit(); ?>