はじめに
WordPressは好きではないけれど、WordPressと同レベルの機能(ユーザー認証、予約投稿、WYSIWYG、メディア管理、プレビュー etc.)を一から開発するのはなかなか大変です。
そこで、WordPressにはCMSとしてDBにデータを作成するところまでを任せ、データ表示は別のシステムで自由に行えるように、WPをAPI化する方法をリストアップします。
1. XML-RPC APIを利用する
WordPressにはXML-RPCのAPIが用意されています。
http://codex.wordpress.org/XML-RPC_WordPress_API
※ XML-RPCにはセキュリティ上のリスクがあり、使用には注意が必要です
参照:http://www.atmarkit.co.jp/ait/articles/1403/13/news133.html
下記のようにしてデータを取得します。
function get_api_data()
{
$param = xmlrpc_encode_request($method_name, $params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
$results = curl_exec($ch);
curl_close($ch);
return xmlrpc_decode($results);
}
2. プラグインを利用する
WP REST APIというプラグインがあります。
http://wp-api.org/
インストールして有効化すると /wp-json
や /wp-json/taxonomies
でデータが取得可能となります。
どんなAPIがあるかは上記のサイトを参照してください。
3. 自作プラグインを開発する
2のWP REST APIのようなものを自力で作成する方法です。
開発の佳境でプラグインの不具合が見つかることや、開発中の要望の変化にプラグインが対応できなくなることがあるので、時間が取れるなら自作してしまうのもいいですね。
4. wp-load.phpを読んでWPの関数を使う
wp-load.php
を読めば、独自のプログラムの中でWordPressの関数が使えるようになります。
require_once(WORDPRESS_ROOT.'/wp-load.php');
class WordpressPost
{
/**
* postを1件取得
*/
public function getPost()
{
$res = array();
$posts = get_posts($args);
if ($posts) {
setup_postdata($post);
foreach ($posts as $post) {
$res[] = $post;
}
}
return $res;
}
}
5. DBから直接データを取得する
WordPressのことは忘れて、MySQLから直接データを取得します。
以下はFuelPHPで書いた場合の例です。
class Model_Wp_Post extends Model
{
/**
* postを1件取得する
*/
public function getPost($id)
{
$query = \DB::select(
'ID',
'post_date',
'post_title',
'post_content'
)
->from('wp_posts')
->where('ID', '=', $id)
->and_where('post_status', '=', 'publish');
$ret = $query->execute()->as_array();
return !empty($ret[0]) ? $ret[0] : null;
}
}