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にてAdvanced Custom Fieldsを用いて連載(シリーズ)記事機能を実装する方法
先日「Series」プラグインで連載(シリーズ)記事機能の実装方法をメモしたが、 ...
-
-
WordPressで自作テーマにウィジェットを登録する方法
WordPressで自作したテーマでウィジェットを登録しようとしたところダッシュ ...
-
-
WordPressでユーザー毎にフラグを持たせ分岐処理を行う方法
WordPressでユーザー毎に何らかのフラグを持たせて、フラグによって分岐処理 ...
-
-
Advanced Custom Fieldsで設定した項目を条件に記事一覧を取得する方法
WordPressでAdvanced Custom Fieldsにて設定した項目 ...
-
-
WPのget_the_contentsでpタグが挿入されない場合の対応方法
WordPressのテーマを編集した際に表示が崩れるという症状が発生した。編集内 ...