勉強したことのメモ

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

  関連記事

Polylangのスイッチャーでクエリを引き継ぐ

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

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

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

WordPressでGmailのSMTPサーバを使ってメール送信フォームを作る

■やりたかった事 WordPressでGmailのSMTPサーバを使用したメール ...

WordPressでテーマ内の共通の変数

WordPressでテーマ内の共通変数を設定し使用したかった。例えば記事一覧ペー ...

WordPressログイン時のヘッダーメニューを非表示

WordPressログイン時にフロント側のページを見るとヘッダーにメニューが表示 ...

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

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

WPのget_the_contentsでpタグが挿入されない

WordPressのテーマを編集した際に表示が崩れるという症状が発生した。編集内 ...

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

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

WordPressの管理画面で記事一覧にアイキャッチ画像を表示

WordPressの管理画面で記事一覧にアイキャッチ画像を表示させる方法のメモ。 ...

WordPressのサーバー移行で気付いた点

あるWordPressを置いているサーバーのリソースが苦しくなってきたので、新た ...