プラグインを使わず、簡単にワードプレスの記事データをJSON形式で出力する方法です。
実装は簡単で、以下のコードをfunctions.phpに追記するだけです。
add_action('wp', array(JsonAPI::getInstance(), 'initialize') );
class JsonAPI
{
private static $_instance;
public function initialize(){}
public static function getInstance()
{
if ( ! isset(self::$_instance) )
{
self::$_instance = new self;
}
return self::$_instance;
}
function __construct()
{
$this->charset = get_bloginfo( 'charset' );
add_action( 'wp_ajax_' . $_REQUEST['action'], array($this, $_REQUEST['action']) );
add_action( 'wp_ajax_nopriv_' . $_REQUEST['action'], array($this, $_REQUEST['action']) );
}
function json_api()
{
$result = new WP_Query(JsonAPI::args());
$status = (result->post_count > 0) ? "OK" : "NotFound";
JsonAPI::json_response($status, $result);
}
function args()
{
$defaults = array(
'ignore_sticky_posts' => 1,
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish'
);
$url = parse_url($_SERVER['REQUEST_URI']);
$args = wp_parse_args($url['query'], defaults);
unset($args['action']);
return $args;
}
function json_response($status, $data)
{
nocache_headers();
header( "Content-Type: application/json; charset={$this->charset}" );
$response = json_encode(array('status' => $status, 'count' => $data->post_count, 'posts' => $data->posts));
die ($response);
}
}
あとは以下のようなURLを叩けば、JSON形式で記事データが出力されます。
http://domain/wp-admin/admin-ajax.php?action=json_api&posts_per_page=10
関数リファレンス/WP Queryを参考にクエリパラメータを変えてあげれば、様々なJSONデータが出力されます。
