勉強したことのメモ

webプログラマが勉強したことのメモ。

WordPressを外部サーバから投稿する方法

   

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でSNSボタンが表示されない

WordPressでWordPress WP Social Bookmarkin ...

WordPressのメール送信フォームに画像認証を設置する

■やりたかった事 ココで作成したメール送信フォームに画像認証を設置する ■方法 ...

WordPressで複数のカテゴリーを取得する

WordPressで1つの記事に対して複数カテゴリを設定していた場合、テーマによ ...

Advanced Custom Fieldsでチェックボックスの記事を取得

Advanced Custom Fieldsでチェックボックス設定しているカスタ ...

gzip圧縮とキャッシュをhttpd.confで設定する

今まで共用サーバーで使っていたWordPressをVPSに移した。 せっかくなの ...

WordPressにお気に入り登録機能とお気に入り一覧ページを作成する方法

WordPressにお気に入り登録機能をつけたかった。 会員制のサイトじゃなかっ ...

さくらvpsにワードプレスを導入

さくらvpsで立ち上げたサーバーにWordPressを導入した際のメモ。 ①ダウ ...

WordPressを4.8.2にして不具合

WordPressを4.8.2にすると記事の新規追加時にウィジウィグの挙動がおか ...

WordPressで固定ページに記事一覧を表示させるプラグイン

WordPressで固定ページ編集時にショートコードを書くことで、記事一覧を表示 ...

WordPressで任意のクエリをページに出力するプラグイン

先日、「WordPressで任意のクエリをページ内で出力する方法 」という記事で ...