勉強したことのメモ

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の記事公開・更新時に何らかの処理を行う方法

WordPressで記事を公開(予約公開含む)もしくは更新した際に何らかの処理を ...

WordPressで「データベース接続確立のエラー」

WordPressで設定ファイル(wp-config.php)は触っていないのに ...

WordPressにインスタグラムの画像を表示

WordPressにインスタグラムへ投稿している画像を表示させたかった。プラグイ ...

WordPressでサイトが改ざんされた際の対処方法

WordPressで立ち上げたサイトがあり、しばらく放置していたが久しぶりにチェ ...

WordPressでタグやカテゴリの複数検索

WordPressでカテゴリのアンド検索や、タグとカテゴリの同時検索を行いたかっ ...

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

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

Polylangのスイッチャーとページャーの組み合わせ

WordPressで多言語サイトを作成するにあたりPolylangというプラグイ ...

contact form7で送信数を測定

contact form7でフォーム送信が完了した時点で計測されるようにトラッキ ...

WordPressのパーマリンクについて

WordPressのパーマリンクについて、思ったことなんだけど、 ・URLに日本 ...

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

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