
PHPからWordPressへ外部投稿する方法
WordPressは、XML-RPCプロトコルがプラグイン無しで対応しているので、それを使うと便利そうです。
XML-PRCとは
RPC(Remote Procedure Call:遠隔手続き呼び出し)プロトコルの一種で、転送内容をXMLフォーマットにエンコードしてリクエストしてその応答もXMLフォーマットにエンコードして返す転送方式です。
ちょっと古いのですが、PHP用のライブラリとして有名な「IXR_Library.php」を利用します。
IXR_Library.phpのダウンロード
以下のサイトからダウンロードできます。
q2a-xml-rpc/IXR_Library.php at master · NoahY/q2a-xml-rpc
XML-RPC server for Q2A. Contribute to NoahY/q2a-xml-rpc development by creating an account on GitHub.
Github.comのページの「q2a-xml-rpc/」をクリックします。
開いたページの「Clone or Download」をクリックします
ダウンロード用の小さいウィンドウが開くので「Download ZIP」をクリックして適当な場所へダウンロードしてください。
ダウンロードしたファイルはZIPsw圧縮されているので解凍します
目的の「IXR_Library.php」が解凍されます。
このライブラリは、これから作るPHPのソースファイル同じフォルダへコピーして利用します。
外部投稿用PHPプログラム作成
WordPressへ外部投稿するPHPソースファイルはP、次の様になりました。
<?php // wp_post.php
header('Content-Type: text/html; charset=UTF-8');
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output('UTF-8');
require_once(__DIR__."/IXR_Library.php");
require_once(__DIR__."/log001.php") ;
// ===========================================================================
// WordPress 投稿処理
//
// 投稿先WordPress情報($wp_infoグローバル変数)
// $wp_info['wp_url'] = URL
// $wp_info[wp_username] = ユーザー名
// $wp_info[wp_password] = パスワード
//
// 投稿内容
// $title = タイトル
// $body = 投稿本文
// $categorys = array('カテゴリ1','カテゴリ2',~);
// $tags = array('タグ1','タグ2',~);
// $delay = 即時0 ~ 遅延投稿(分)
//
function wp_post($title, $body, $categorys, $tags, $delay)
{
global $wp_info;
$postDate = new IXR_Date(time() + 60 * $deley); // 投稿時刻
// 投稿の内容
$contents = array(
'post_author' => '', // 投稿者名通常
'post_status' => 'publish', // 公開投稿
'post_title' => $title, // タイトル
'post_content' => $body, // 本文
'terms_names' => array(
'category' => $categorys, // カテゴリ集(配列)
'post_tag' => $tags // タグ集(配列)
)
);
if($deley > 0){
$contents['post_date'] = $postDate; // 投稿時刻
$contents['post_status'] = "future";
}
// コンテンツ投稿
$ixr = new IXR_Client($wp_info[wp_url]."/xmlrpc.php");
$res = $ixr->query(
"wp.newPost", // 新規投稿処理
1, // blog_id 通常=1
$wp_info[wp_username], // WordPressのusename
$wp_info[wp_password], // WordPressのpassword
$contents // 投稿の内容
);
if(!$res){
logprint4("WP投稿失敗".$ixr->getErrorMessage()."(".$ixr->getErrorCode().")");
}
else{
logprint4("WP投稿完了".$title);
}
$ret[res] = $res;
$ret[erm] = $ixr->getErrorMessage();
$ret[erc] = $ixr->getErrorCode();
return $ret;
}
?>
先程ダウンロードした「IXR_Library.php」と以前解説した、簡単にログをとる関数のファイルをインクルードしています。
簡単ログの記事は、こちら↓

PHP 超簡単にログをとる
PHPでログをとる必要性 PHPプログラムを開発していく過程で、デバッグを行いますが、C言語、VBと違いトレースを行う環境を作りにくい現状。 また、実際の運用でも動作が問題なく完了してるか、エラーは発生してるかなどの履歴を残すことは重要です...
外部投稿用PHPプログラムチェック
テスト用にPHPプログラム作って確認してみましょう
<?php // post_test.php
header('Content-Type: text/html; charset=UTF-8');
mb_language("Japanese");
mb_internal_encoding("UTF-8");
mb_http_input("UTF-8");
mb_http_output('UTF-8');
require_once(__DIR__."/wp_post.php");
$wp_info['wp_url'] = "URL";
$wp_info[wp_username] = "ユーザー名";
$wp_info[wp_password] = "パスワード";
$title = "WP投稿テスト";
$body = "WP投稿テスト
\n投稿本文\n";
$categorys = array("テスト1");
$tags = array("タグ1","タグ2");
// 外部投稿テスト
wp_post($title, $body, $categorys, $tags, 0);
?>
投稿結果
PHPで外部から投稿された記事です。