WordPressへの新規投稿をXML-RPCで

ワードプレスは、外部エディタからの入力にも対応しています。
PHPのプログラムから、新規投稿を行うシンプルな方法を紹介します。

この機能を利用するためには、管理パネルで、リモートパブリッシングの設定を行う必要があります。

writing settingでXML-RPCを許可してください。

やり方は、いろいろありますが、まずデベロッパの方は、
wp-includes/class-wp-xmlrpc-server.phpのコンストラクタのxmlrpc_methodsに目を通してください。

cURLを使う例

<?php
 
$USERNAME= "";
$PASSWORD= "";

$BLOGID= 1;
$BLOGURL= "";
 
$XMLRPC_URL= $BLOGURL."/xmlrpc.php";
 
function get_response($URL, $context) {
 if(!function_exists('curl_init')) {
 die ("Curl PHP package not installed\n");
 }
 
 /*Initializing CURL*/
 $curlHandle= curl_init();
 
 /*The URL to be downloaded is set*/
 curl_setopt($curlHandle, CURLOPT_URL, $URL);
 curl_setopt($curlHandle, CURLOPT_HEADER, false);
 curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
 curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $context);
 
 /*Now execute the CURL, download the URL specified*/
 $response= curl_exec($curlHandle);
 return $response;
}
 
 /*Creating the request */
 $request= xmlrpc_encode_request("metaWeblog.newPost",
 array($BLOGID, $USERNAME, $PASSWORD ,array('description'=> '練習だよ','title'=>'ほらこれだよ'),1),array('escaping'=> "markup",'encode'=>'UTF-8') ) ;
 
 /*Making the request to wordpress XMLRPC of your blog*/
 $xmlresponse= get_response($XMLRPC_URL, $request);
 $response= xmlrpc_decode($xmlresponse);
 
 if ($response && xmlrpc_is_fault($response)) {
 trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
 } else {
 /*Printing the response on to the console*/
 print_r($response);
 }
echo "\n";

?>

WordPressのclass-IXR.phpを利用して作る。xmlrpc クライアントの例

< ?php

require_once(“class-IXR.php”);

$host = “http://www.example.com/wp”;
$base_uri = $host. “/xmlrpc.php”;
$USER = ‘user’;
$PASS = ‘password’;

$client= new IXR_Client($base_uri);

if (!$client->query(‘wp.getCategories’,”, $USER,$PASS)){

echo(‘Error occured during category request.’ . $client->getErrorCode().”:”.$client->getErrorMessage());

}
$cats= $client->getResponse();

//取得したカテゴリから、エントリーに追加するカテゴリを探す処理
//var_dump( $cats );

?>< ?php $content['title']= 'Test title '; $content['categories']= $cats[0]; $content['description']= '

Lorem ipsum dolor sit amet’;

$content[‘custom_fields’]= array( array(‘key’=> ‘my_custom_fied’,’value’=>’yes’) );
/* tag */
$content[‘mt_keywords’]= array(‘foo’,’bar’);

if (!$client->query(‘metaWeblog.newPost’,”, $USER,$PASS, $content, true))
{

die( ‘Error while creating a new post’ . $client->getErrorCode() .” : “. $client->getErrorMessage());

}
$ID= $client->getResponse();

if($ID)
{

echo ‘Post published with ID:#’.$ID;

}

?>

slug を指定する

<?php

require_once("./wp-includes/class-IXR.php");

$host		= "http://";
$base_uri	= $host . "/xmlrpc.php";
$USER		= '';
$PASS		= '';

$client= new IXR_Client( $base_uri );

if ( !$client->query( 'wp.getCategories', '', $USER, $PASS ) ) {
	echo( 'Error occured during category request.' . $client->getErrorCode() . ":" . $client->getErrorMessage() );
}
$cats= $client->getResponse();

$content[ 'wp_slug' ] = 'hello-mytest';
$content[ 'title' ]= 'Test title ';
$content[ 'categories' ] = $cats[ 0 ];
$content[ 'description' ] = '<p>Lorem ipsum dolor sit amet</p>';
$content[ 'custom_fields' ] = array( array( 'key'=> 'my_custom_fied', 'value'=> 'yes' ) );
$content[ 'mt_keywords' ] = array( 'foo', 'bar' );

if ( !$client->query( 'metaWeblog.newPost', '', $USER, $PASS, $content, true ) ) {
	die( 'Error while creating a new post' . $client->getErrorCode() . " : " . $client->getErrorMessage() );
}
$ID= $client->getResponse();

if ( $ID ) {
	echo 'Post published with ID:#' . $ID;
}
?>