WordPress

WordPressの記事をJSONで配信するAPIページを作ってみた

  • このエントリーをはてなブックマークに追加
  • Pocket
json wordpress

みなさん、こんにちは!

仕事でWordPressの記事配信用APIページを作成しました。

せっかくなのでこのブログに記録を残しておこうと思います。

WordPressの記事をJSONで配信するAPIページの作り方

STEP.1 固定ページとPHPファイルの作成

まずはじめにするのは、固定ページとそのページに反映させるPHPファイルの作成です。

テーマフォルダに「page-api.php」といファイル名でPHPファイルを作成します。

その際にPHPファイルの1番上に、

<?php
/*
Template Name: API Page
*/

と記述します。

これは固定ページをWordPressで設定する際に必要となります。

固定ページの新規作成を行いパーマリンクをお好きな文字列(今回の例では「https://anyushu.com/json-api/」にします)にして下さい。

次に、固定ページのテンプレートを選択します。

固定ページのテンプレート

固定ページ 編集画面の右側にこのようなテンプレートを選択出来る場所があります。

先程PHPに記述した「Template Name: API Page」のPHPファイルが選択できるようになっているはずです。

STEP.2 PHPで記事配信用JSONを出力する

では実際に記事を配信用のJSONをPHPで出力させます。

手始めに全ての記事のタイトルを取得してみましょう。

<?php
/*
Template Name: API Page
*/

$data =''; //配信用jsonデータ格納変数

$args = array(
    'posts_per_page' => -1, //取得記事数 -1だと全て
    'post_type' => 'post', //取得タイプを記事に
    'orderby' => 'date', //順番の種別
    'order' => 'DESC', //降順に
    'post_status' => 'publish' //公開済みのみ
);

$query = new WP_Query($args);
while ($query->have_posts()) {
    $query->the_post();

    $title = get_the_title(); //記事のタイトル

    // 取得したものを配列に追加
    $data[] = array(
        'title' => $title
    );
}

wp_reset_query();

header('Content-type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);

これで全記事のタイトルがJSONとして出力できます。

当サイトで実際に出力させます。

[{
 "title": "WordPressで行うSEO内部対策の方法とそのコツとは"
}, {
 "title": "思わず見入ってしまう!おしゃれすぎるWEBサイトまとめ【10選】"
}, {
 "title": "【2017年版】SEO対策に必須なツールをまとめました。"
}]

長すぎるので途中で切っていますが、ちゃんと出力できました。

$title = get_the_title();

このタイトル取得の関数を記述している時点でお気づきの方もいらっしゃるかと思いますが、基本的には投稿の出力方法とほぼ同じです。

ですので、記事のデータ取得関数をお好きに追加して活用して下さい。

例)

$title = get_the_title(); //記事のタイトル
$thumbnail = get_the_post_thumbnail($post->ID, 'large'); //アイキャッチ
$category = get_the_category(); //カテゴリーデータ
$date = get_the_time('Y-m-d'); //公開日
$url = get_permalink(); //パーマリンク
$body = apply_filters('the_content', get_the_content()); //本文

STEP.3 用途別に配信内容を分ける

ここからが苦労したところです。

ただの地道な作業なので…

今状態だと全ての記事のデータをJSONに乗っけて、受け取った側が必要な情報は受け取った側がしないといけません。

これではAPIとは言えないので、リクエストURLによって出力する内容を分けていきます。

今回は特定のカテゴリー記事のみを出力させます。

先程までだとリクエストURLは「https://anyushu.com/json-api/」でしたが、

特定のカテゴリー配信用にするため「https://anyushu.com/json-api/?cat=カテゴリーID」にアクセスするとそのカテゴリーIDに属する記事のJSONデータのみを返すようにしてみたいと思います。

<?php
/*
Template Name: API Page
*/

$data =''; //配信用jsonデータ格納変数

//追加
if (isset($_GET['cat'])) {
    $cat_id = $_GET['cat'];
} else {
    $cat_id = 0;
}

$args = array(
    'posts_per_page' => -1, //取得記事数 -1だと全て
    'post_type' => 'post', //取得タイプを記事に
    'cat' => $cat_id, //追加
    'orderby' => 'date', //順番の種別
    'order' => 'DESC', //降順に
    'post_status' => 'publish' //公開済みのみ
);

これで特定のカテゴリー記事のJSONデータにアクセス出来るようになります。

実際に下記リンクより試してみて下さい。

当サイトのWordPressカテゴリーの記事タイトルのみ

この要領で沢山のパターンを用意することが出来ます。

特定のタグや公開日など、またパラメータの組み合わせによる二重以上の絞り込みも出来ます。

これをひたすら用意するのは大変ですが…

最後に

基本的な方法は以上になります。

あとは制作者側の根気と親切な心で、いかに汎用性の高いAPIページになるかが決まります(笑)

あまり需要は無いかもしれませんが、参考になっていたら嬉しいです。

もしもWordPress記事をJSON形式で配信するAPIページを作る機会がありましたら頑張ってください!

 

合わせて読みたい記事

よく使うWordPressの関数をまとめたのでどうぞ!

  • このエントリーをはてなブックマークに追加
  • Pocket
Anyushu

コメントを残す

*