XML-RPCライブラリを利用してWordPressを外部サーバから投稿する方法
2024/03/04
WordPressをダッシュボードからではなく、外部サーバのプログラムから投稿したかった。調べてみると「XML-RPC」というライブラリでいけるみたい。以下にダウンロード先と使い方と処理をまとめた関数をメモ。
ダウンロード先
http://scripts.incutio.com/xmlrpc/
関数
//---------------------------------------- // WordPress外部投稿 // // **引数** // $domain(string) 投稿したいWordPressを置いているサーバのドメイン // $user(string) WordPressのユーザー // $pass(string WordPressのパスワード // $author(int) 投稿者のID // $title(string) 投稿タイトル // $contents(string) 投稿本文 // $status(string) 投稿状態。デフォルトは下書き。publishだと公開 // $category(int) 投稿カテゴリ。デフォルトは未分類 // $tag(array) 投稿タグ。デフォは何もなし // $img(string) アイキャッチ画像。[./img/test.jpg]のようにディレクトリ形式で指定。デフォは何もなし // // **返り値** // bool(true or false) //---------------------------------------- function postWordPress( $domain, $user, $pass, $author = 1, $title, $contents, $status = 'draft', $category = 1, $tag = array(), $img = '' ) { //必須引数のチェック if( !$domain || !$user || !$pass || !$title || !$contents ){ return false; } //ライブラリの読み込み include_once('./IXR_Library.php'); $client = new IXR_Client($domain . 'xmlrpc.php'); //画像が指定されている場合はチェックとアップロード if( $img && file_exists($img) ){ $imgInfo = getimagesize($img); $type = $imgInfo['mime']; $bits = new IXR_Base64(file_get_contents($img)); $imgData = $client->query( 'wp.uploadFile', 1, $user, $pass, array( 'name' => 'test.jpg', 'type' => $type, 'bits' => $bits, 'overwrite' => false ) ); $imgResult = $client->getResponse(); } $postData = array( 'post_author' => $author, 'post_status' => $status, 'post_title' => $title, 'post_content' => $contents, 'terms' => array('category' => array($category)), 'terms_names' => array('post_tag' => $tag) ); if( $imgResult ){ $postData['post_thumbnail'] = $imgResult['id']; } $return = ( $result = $client->query('wp.newPost', 1, $user, $pass, $postData) ) ? true : false; return $return; }
使い方
上記関数を書いたファイルと同じディレクトリにXML-RPCの「IXR_Library.php」をアップロードしておく。あとは引数を設定。例としては以下のような感じ。
$test = postWordPress( 'http://hogehoge.com/', 'sampleuser', 'samplepass', 1, 'ここにタイトル', 'ここに本文', 'publish', 1, array('タグ1','タグ2'), './img/test.jpg' ); var_dump($test); //true or false
返り値はbool。
注意点として$domainの部分はxmlrpc.phpを置いてあるディレクトリを指定しないといけない。wp-config.phpとか置いてあるところ。
http://hoge.com/wordpress/xmlrpc.phpという構成になっている場合、サイトの表示は「http://hoge.com」だけど、今回指定するのは「http://hoge.com/wordpress/」になるので注意。
関連記事
-
WordPressでスケジュール実行される日時を調べる方法
WordPressであるシステムを実装し、その際に毎日1回スケジュール実行(WP ...
-
wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法
WordPress内に設置されたお問い合わせのフォームようなシステムでエンベロー ...
-
WordPressのテーマファイル内で取得したオブジェクトを指定のフィールド名でソートする方法
WordPressのテーマファイル内で記事やカテゴリ一覧等を取得するとオブジェク ...
-
WordPressでカスタムフィールドとCSVファイル投稿する方法
WordPressでカスタムフィールド設定している環境に、CSVファイルアップロ ...
-
WordPressのWP-Mail-SMTPプラグインが動かない
PHPのバージョンを下げてからWordPressで外部メールサーバが使えるWP- ...