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