ここまでのあらすじ
コンテンツ管理部分と表示部分を分けて制作したいと思い、
Headless CMSという考え方があるのを知りました。
Contentfulなどはその考え方に則ったサービスを展開しているようですし、
WordpressにもWP REST APIという機能があります。
しかしもっとこう手軽にカスタマイズしたかったので、
WordpressのテーマとしてコンテンツをJSONで吐き出す仕組みを作ってみました。
仕組み
非常に単純で、通常のテーマで文字列やタグを吐き出すような場面で、
代わりにデータを配列にpushします。
そして最後にその配列を
echo json_encode( $array );
のようにjson_encodeを噛ませてから吐き出せば自分流のAPIを作ることができます。
例えばこんな感じ。
<?php
// 外部からの呼び出しを許可
header( "Access-Control-Allow-Origin: *" );
// コンテンツを格納する配列
$contents = array();
// Wordpressでよく使うループ
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// 配列$contentsに記事タイトルと記事内容を追加
array_push($contents, array(
"title" => get_the_title(),
"content" => get_the_content()
));
endwhile;
endif;
// JSONにして吐き出し
echo json_encode($contents);
アクセスするとJSONで表示されるはずです。
雑感
Wordpressのテーマなので、Wordpressと同様のリクエストの仕方で絞り込み(日付、タグなど)ができます。
公式のAPI(HTTP REST API)に比べて手軽さで勝るかと思います。
なんか重大なセキュリティの危険とかが無ければこのまま利用するつもりです。