Eine simple API für WordPress, Teil 4

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();
?>