WordPress内からXML-RPCを利用して記事投稿を行う方法

xml-RPC
WordPress内からXML-RPCを利用して記事投稿を行う方法です。

XML-RPCとは

RPCプロトコルの一種であり、エンコード(符号化)にXMLを採用し、転送機構に HTTP を採用している。非常に単純なプロトコルで、少数のデータ型やコマンドだけを定義しているだけであり、その仕様は2枚の紙にまとめられる。これは多くのRPCシステムが膨大な量の規格を規定し、実装に多量のプログラミングを要することに比べると、際立った特徴と言える
XML-RPC – Wikipedia

XML-RPCを利用するとWordPressの管理画面に入ることなく
WordPressの投稿記事を書くことができます。

このエントリではWordPressでphpを実行して違うWordPress記事投稿を行います。

手順

参照したソースコードは
[WordPress]XML-RPCを利用して外部から投稿したりする。 | WEBプログラム覚書
のものを利用させていただいています。

[1] XML-RPCの設定を行います。

xml-RPC
投稿先の管理画面で

設定 > 投稿設定 > リモート投稿

の「XML-RPC WordPress、Movable Type、MetaWeblog および Blogger XML-RPC 投稿プロトコルを有効にする。」
にチェックをいれて設定を保存します。

[2]WordPress内でZend Frameworkが利用できるように
『WP Zend Library』のプラグインをインストールします。

詳細は
『WP Zend Library』WordPressでZend Frameworkを使えるようにするプラグイン | WordPress攻略本
に記載しています。

[3]phpを書きこむページを用意する

編集するページはどこでもかまいません。
例としてphpを実行するための固定ページを新規に用意します。

theme内のpage.phpを複製して、ファイル名をtest-xml-rpc.phpとします。
test-xml-rpc.phpの冒頭部分にテンプレート名を指定します。

<?php
/*
Template Name: test-xml-rpc.php
*/
?>

保存後、固定ページ作成画面の
ページ属性 > テンプレートからtest-xml-rpc.phpを選び保存します。
xml-RPC

[4]phpを編集する

XML-RPCのライブラリとして、 Zend FrameworkのZend_XmlRpc_Clientを利用します。
Zend Framework: Documentation: Zend_XmlRpc_Client – Zend Framework Manual

 <?php

  // URI、ログインユーザ名とパスワードの設定
 $uri = 'http://wordpress.domain/xmlrpc.php';
 // 投稿先WordPressのログインユーザー名			
 $user = 'username';
 // 投稿先WordPressのログインパスワード		
 $passwd = 'password';


  
 $client = new Zend_XmlRpc_Client($uri);

  

 // 接続してブログの基本情報を取得

 // 失敗すると例外がスローされる。

  

 try {
    //wp.getUsersBlogsはWordPress内で定義されているメソッドなのでこのまま
     $infos = $client->call('wp.getUsersBlogs', array($user, $passwd));

  

 } catch (Zend_Exception $e) {

     echo $e->getMessage();

 }

  

 echo '<h2>ブログの基本情報</h2>';

 echo '<pre>';

 var_dump($infos);

 echo '</pre>';

  

 // blog ID 基本的に1。

 // 3系では複数のブログが管理できるようなので増えるのかも?

 $blog_id = $infos[0]['blogid'];



 // 投稿データの作成

 $contents = array(
	//記事件名
     'title'             => 'テスト投稿',
	//カテゴリ名を日本語名で指定
     'categories'        => array('インテリア', '建築'),
	//カスタムフィールドがあれば指定 なければnull
     'custom_fields'     => array(array('key' => 'field_key1', 'value' => 'field_key1のvalue'),

                                  array('key' => 'field_key2', 'value' => 'field_key2のvalue')

                                 ),
	//記事本文
     'description'       => 'テスト投稿の本文',

     'dateCreated'       => null,
	 //記事のスラッグになる
     'wp_slug'           => 'xml-rpc-testpost',

     'mt_allow_comments' => null,

     'mt_allow_pings'    => null,

     'mt_convert_breaks' => null,

     'mt_text_more'      => null,
 //記事の抜粋に入る
     'mt_excerpt'        => 'Wordpress XML-RPCのテスト',
	//記事のタグに入る
     'mt_keywords'       => array('icon', 'インスピレーション'),

     'mt_tb_ping_urls'   => null,

 );

  

 // 公開設定 falseだと下書きの状態
 // true で公開
$publish = false;

  

 // 投稿を実行
//metaWeblog.newPostはWordPress内で定義されているメソッドなのでこのまま
 $result = $client->call('metaWeblog.newPost',

                         array($blog_id, $user, $passwd, $contents, $publish)

                         );

  

 echo '<h2>実行結果 成功するとPost IDが返ってくる</h2>';
 echo '<pre>';
 echo $result;
 echo '</pre>';
 ?>

test-xml-rpc.phpを実行するたびに投稿記事が作成されるようになります。

「WordPress内からXML-RPCを利用して記事投稿を行う方法」への1件のフィードバック

コメントを残す

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>