WordPress

[WordPress] 記事を JSON で出力する API ページを作る

WordPress の記事を外部から取得する際は、基本的にフィードを利用しますが、その場合、取得できる最大件数が決められていたり、公開された記事しか取得できないなどの制約があります。

そのような制約を無視して、WordPress に蓄えた情報を JSON で出力する API ページを作る方法を紹介します。

API Page Template を作成する

API は、WordPress で現在適用しているテーマファイルに、オリジナル固定ページという形で設置します。最新記事3件を JSON で出力するコードが書かれた api-page.php を用意します:

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

$args = array(
  'numberposts' => 3,
  'orderby'     => 'post_date',
  'order'       => 'DESC',
);
$posts = get_posts($args);

if($posts): foreach($posts as $post):
  setup_postdata($post);
  $json[] = $post;
endforeach; endif;

header("Content-Type: application/json; charset=utf-8");
echo json_encode($json);

get_posts() には、多くのパラメータを渡すことができます。詳しくは、WordPress Codex ページに載っています。→ テンプレートタグ/get posts - WordPress Codex 日本語版

変更例としては、numberposts = -1 にすることで全件出力できます。今回は指定しませんでしたが、post_status = any にすればまだ公開されていない記事が取得できます。拡張例としては、GET パラメータにカテゴリ ID を指定し、それを利用することで任意のカテゴリだけを出力するなどもできます。

作成した api-page.php は、適用しているテーマファイルに追加しておきます。

固定ページを作成する

WordPress 管理画面から固定ページを新しく作成します。

[Page Attribute] → [Template] から先ほど作成した [API Page] を選択します。また、Permalink を /api にしておくと雰囲気が高まります。適当な記事タイトルを入力して公開します。

出力例

指定した Permalink の場所にアクセスすると以下のように JSON が出力されます:

[
    {
        "ID": 6698,
        "post_author": "1",
        "post_date": "2014-07-10 05:46:55",
        "post_date_gmt": "2014-07-09 20:46:55",
        "post_content": "省略",
        "post_title": "ハリオ コーヒーミル・セラミックスリム",
        "post_excerpt": "",
        "post_status": "publish",
        "comment_status": "open",
        "ping_status": "closed",
        "post_password": "",
        "post_name": "省略",
        "to_ping": "",
        "pinged": "",
        "post_modified": "2014-07-10 21:32:23",
        "post_modified_gmt": "2014-07-10 12:32:23",
        "post_content_filtered": "",
        "post_parent": 0,
        "guid": "http://rakuishi.com/?p=6698",
        "menu_order": 0,
        "post_type": "post",
        "post_mime_type": "",
        "comment_count": "0",
        "filter": "raw"
    },
    {
        /* 省略 */
    },
    {
        /* 省略 */
    }
]

サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル