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で外部から投稿された記事です。