XML-RPCとPHPでWordPressに投稿する
2016年1月1日:WordPress
WordPressにPHPにより投稿するプログラムをつくる方法について解説します。PHPで投稿するにはXML-RPCという仕組みを利用します。XMLファイルをWordPressに送ることで、記事を投稿します。このXML-RPCにはPHPのライブラリであるXML_RPCを使用します。
WordPressとXML-RPC通信を行う際にルールが必要です。このルールについては以下のページに書かれています。
XML-RPC WordPressのCodex日本語版はこちら
日本語版は一部抜けている場所があるので、その場合は英語版を読みましょう。
XML-RPC WordPressのCordex英語版はこちら
WordPressへの接続
はじめにWordPressにログインする必要があります。そのために「wp.getUsersBlogs」を使用します。用法を以下にまとめます。
wp.getUsersBlogs
ブログID、ブログ名、ブログURLなどのブログ情報を取得できます。
入力:
string ユーザー名、string パスワード
出力:
array struct string blogid string blogName string url string xmlrpc bool isAdmin
では使ってみましょう。以下のようにプログラムを組みましょう。
<?php require_once("XML/RPC.php"); $c = new XML_RPC_client("/xmlrpc.php", "XXXX.com", 80); $username = new XML_RPC_Value( 'User', 'string' ); $passwd = new XML_RPC_Value( 'PassWord', 'string' ); $message = new XML_RPC_Message('wp.getUsersBlogs',array($username, $passwd)); $result = $c->send($message); if(!$result){ exit('Could not connect to the server.'); } else if( $result->faultCode() ){ exit($result->faultString()); } $blogs = XML_RPC_decode($result->value()); $blog_id = new XML_RPC_Value($blogs[0]["blogid"], "string"); ?>
required_onceでRPC.phpを読み込みます。はじめにWordPressに接続するため、XML_RPC_clientを使用します。ここのXXXX.comにあなたのサイトドメインを指定しましょう。/xmlrpc.phpと80は固定なので、そのままでOKです。
次に、WordPressにログインします。User,PassWordにWordPressにログインする際のユーザー名とパスワードを記入します。これらの値をXMLにする必要があるので、XML_RPC_Valueで変換します。今回は構文が$userと$passwdにおいてstringを指定しているので、stringを指定します。XML_RPC_Messageにより送信するための文章を作成します。今回はwp.getUsersBlogsで、値は$usernameと$passwdです。
最後にWordPressにメッセージを送信します。$c->send($message)で送信されます。結果は戻り値$resultで知ることができます。if文でうまくいかなかったら終わるようにしています。
戻り値はXML_RPC_decodeでデコードして知ることができます。今回はarrayでブログ情報が順に入っています。そして、structにブログIDなどの情報が入っています。ブログはたいてい一つしかないでしょうから、$blogs[0][“blogid”]によりブログIDを取得しています。
WordPressへの記事投稿
ではWordPressへ記事を投稿しましょう。記事の投稿には「wp.newPost」を使用します。
wp.newPost
WordPressに記事を投稿します。渡すパラメタは以下の通りです。
データ型 | 記号 | 意味 |
int | blogid | ブログID、型は整数型 |
string | username | ログインの際のユーザー名 |
string | password | ログインの際のパスワード |
struct | content | 記事の内容構造体 |
blogid、username,passwordは接続の際に取得した値と使用した値です。ここでの問題は構造体contentです。このcontentに記事の内容が入ります。
content構造体
記事の内容を記述します。
データ型 | 記号 | 意味 |
string | post_type | |
string | post_status | 下書き、レビュー待ちの設定です。 |
string | post_title | 記事のタイトルです。 |
int | post_author | 記事の著者です。著者IDを入れて指定します。 |
string | post_excerpt | 記事の抜粋です。 |
string | post_content | 記事の内容です。htmlで記述します。 |
datetime | post_date | 記事投稿の時間です。 |
string | post_format | |
string | post_name | スラッグ(URLにつくやつ)です。 |
string | post_password | 記事を見る際のパスワードです。 |
string | comment_status | |
string | ping_status | |
int | sticky | |
int | post_thumbnail | アイキャッチ画像に使用する画像を選択します。画像IDを指定します。 |
int | post_parent | |
array | custom_fields | カスタムフィールドの指定です。 |
struct | terms | IDによるタグ、カテゴリの設定です。 |
struct | terms_names | 名前によるタグ、カテゴリの設定です。 |
struct | enclosure |
では使用してみましょう。
$categories=array(new XML_RPC_Value('カテゴリ名','string')); $tags=array(new XML_RPC_Value('タグ1','string'), new XML_RPC_Value('タグ2','string')); $terms=array( 'category'=> new XML_RPC_Value($categories,'array'), 'post_tag'=> new XML_RPC_Value($tags,'array') ); $content = new XML_RPC_Value( array( 'post_title' => new XML_RPC_Value('タイトル', 'string'), 'post_content' => new XML_RPC_Value('<p>コンテンツ</p>', 'string'), 'post_name' => new XML_RPC_Value('slug','string'), 'terms_names' => new XML_RPC_Value($terms,'struct'), 'post_date' => new XML_RPC_Value(time(), 'dateTime'), 'post_excerpt' => new XML_RPC_Value('ここに抜粋', 'string'), 'post_status' => new XML_RPC_Value('publish','string'), ),'struct'); $message = new XML_RPC_Message('wp.newPost', array($blog_id, $username, $passwd, $content)); $result = $c->send($message); if(!$result){ exit('Could not connect to the server.'); } else if( $result->faultCode() ){ exit($result->faultString()); }
はじめの$categoriesと$tagsにstring型でカテゴリとタグを指定します。そして、$termsにarray型で保存します。そして、$contentにタイトル、コンテンツ、スラッグなどの情報を記述します。最後に、XML_RPC_Messageでwp.newPostのメッセージを作成し、sendでサーバーに送信します。成功すると、戻り値に記事IDが記憶されます。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー