勉強したことのメモ

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の記事情報をpostIDを指定して取得する方法

他所のサーバからWPの記事IDを指定した上で、当該IDのタイトル・アイキャッチ画 ...

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

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

WordPressでテーマの作成

CSSとHTMLコーディングデータがあり、それをWordPressのテーマに反映 ...

WordPressのウィジェットをTOPのみ等、特定のページだけ表示する方法

■やりたかった事 TOPページのみ任意のウィジェットを表示させ、記事ページやアー ...

WordPressを停止しないままサーバ移設する方法

WordPressを設置しているサーバのリソースがそろそろ危ういので移設を検討す ...

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

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

WordPressでSNSボタンが表示されない

WordPressでWordPress WP Social Bookmarkin ...

WordPressでコンテンツ内に広告を差し込む方法

WordPress内でヘッダーやフッターではなく、コンテンツ内に広告を差し込みた ...

WordPressでプラグインの作成方法

WordPressで簡単なニュースを表示させるというプラグインを作成したので、使 ...

WordPressでNo URL was~というエラー

WordPressでmp4ファイルをアップロードして記事に埋め込んだものの、記事 ...