XML-RPC 投稿日時を指定してWordPressへ投稿する

XML-RPCを使ってWordPressへ投稿する方法はわかりました。
※「XML-RPCを使ってWordPressへ投稿する」参照

今回は、投稿日時を指定して投稿する方法を紹介します。
今回もまずはサンプルです。

XML-RPCを利用し、投稿日時を指定して投稿するサンプル

includeで指定している、IXR_Library.phpファイルの入手方法は、
XML-RPCを使ってWordPressへ投稿する」を参照してください。

< ?php
/*
* XML-RPC接続テスト
*/
include_once('IXR_Library.php');

$site_url = 'http://hogehoge.com';
$userid = '[wordpressのID]';
$userpw = '[wordpressのPassword]';

//wordpressのxmlrpc.phpがある場所を指定
$base_uri = $site_url . '/xmlrpc.php';

//接続パラメータ
$encoding = 'UTF-8';
$method = 'metaWeblog.newPost';

$title = 'タイトル・タイトル・タイトル';
$description = '本文・本文・本文' . "\n" . 'あいうえお';
//実際に送るデータ
$params = array(
	1,
	$userid,
	$userpw,
	array(
	'title' => $title,
	'description' => $description,
	'dateCreated' => date("Ymd\TH:i:s", mktime(date("H")-9, date("i"), date("s"), date("m"), date("d")+5, date("Y")) ),    //5日後,
	),
	0,   //0:草案 1:公開
);

// XML-RPC通信をする
$client = new IXR_Client($base_uri);
$return = $client->query($method, $params);
if ( !$return ) {
	echo $client->getErrorCode() . ':' . $client->getErrorMessage() . '\n';
	exit();
} 

$postid = $client->getResponse();    //PostIDの取得

?>

※日付形式は、ISO.8601で指定する必要があります。

'dateCreated' => date("Ymd\TH:i:s", mktime(date("H")-9, date("i"), date("s"), date("m"), date("d")+5, date("Y")) ),    //5日後

この箇所の指定を行うだけで簡単にできるはずだ。と思っていたのですが、はまってしまいました。

WordPress側のバグだった

どうもうまく投稿処理ができないので、デバッグ作業をしていると、

Fatal error: Call to a member function getIso() on a non-object in /.../wp/xmlrpc.php on line xxx

といったエラーが、WordPress側にある、xmlrpc.phpで発生していることが判明しました。
※WordPress ME2.2.3で発生しました。

さらに調べていくと、このxmlrpc.phpの中にある、

$dateCreatedd = $content_struct['dateCreated'];
if (!empty($dateCreatedd)) {
    $dateCreated = $dateCreatedd->getIso();
    $post_date     = get_date_from_gmt(iso8601_to_datetime($dateCreated));
    $post_date_gmt = iso8601_to_datetime($dateCreated. "Z", GMT);
} else {
    $post_date     = current_time('mysql');
    $post_date_gmt = current_time('mysql', 1);
}

この箇所を、以下のように編集する必要があることがわかりました。

$dateCreatedd = $content_struct['dateCreated'];
if (!empty($dateCreatedd)) {
    $dateIXR = new IXR_Date($dateCreatedd);
    $dateCreated = $dateIXR->getIso();
    $post_date     = get_date_from_gmt(iso8601_to_datetime($dateCreated));
    $post_date_gmt = iso8601_to_datetime($dateCreated. "Z", GMT);
} else {
    $post_date     = current_time('mysql');
    $post_date_gmt = current_time('mysql', 1);
}

これで、ようやく投稿日時を指定したWordPressへの投稿がうまくいきました。

参考資料
WordPress › Support » posting via xmlrpc metaWeblog -> error in xmlrpc.php

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です