Site icon Tips Note by TAM

WordPress REST API で、カスタム投稿タイプなどの情報を取得する

ちょいちょい使う機会も増えてきた WordPress の REST API ですが、カスタム投稿タイプやカスタムタクソノミー関連のデータ取得が必要な機会がありましたので、方法をまとめておきます。ひと手間だけかかる感じでした。

まずは軽くおさらい。

REST API のセットアップ

WordPress で REST API を使いたい場合は、こちらのプラグインを入れて有効化します。以上です。

WordPress REST API

使い方は、ドキュメントがしっかりまとまっています。

API Reference | WP REST API v2 Documentation

投稿データを取得

基本的な使い方として、まずは最新の投稿データを取得したい場合。(以後、例としてドメイン名は example.com とします)
こちらのURLにアクセスすると、json形式で結果が返ってきます。

http://example.com/wp-json/wp/v2/posts

GETのパラメタとして _embed を付加すると、アイキャッチ画像やコメントなど、付随する情報もいっぺんに取得できるようになります。便利です。

http://example.com/wp-json/wp/v2/posts?_embed

また、RESTful な API ですので、たとえば投稿IDが 123 のデータを取得したければ、URLを

http://example.com/wp-json/wp/v2/posts/123

にするだけでOKな感じです。

投稿を検索

API で投稿を検索して結果を取得したい場合、

http://example.com/wp-json/wp/v2/posts?filter[s]=あいうえお

こんな感じで filter[s] に文字列を渡します。
filter の仕様は WP QUERY に準じているようです。なので、検索しつつ最新5件を取得したければ posts_per_page を併用し、

http://example.com/wp-json/wp/v2/posts?filter[s]=あいうえお&filter[posts_per_page]=5

こんな風に。
また、指定されたタグだけの情報を取得したければ

http://example.com/wp-json/wp/v2/posts?filter[tag]=mytag

こんな感じとなります。

カテゴリやタグの情報を取得

このへんもシンプルな形で、以下のURLから情報を取得できます。

http://example.com/wp-json/wp/v2/categories
http://example.com/wp-json/wp/v2/tags

カスタム投稿タイプの情報を取得

本題。

デフォルトでは、カスタム投稿タイプやカスタムタクソノミーのデータは REST API から取得できませんでした。取得させたい場合、テーマ側の functions.php などでカスタム投稿タイプを登録する際に、register_post_type() のオプションとして以下を追加する必要があります。

オプション
show_in_rest true (デフォルトはfalse, その場合 WP REST APIから取得できない)
rest_base URLのベースとなる名前 (省略時はカスタム投稿タイプ名)
rest_controller_class 処理するコントローラ名。基本省略でOKで、デフォルトは WP_REST_Posts_Controller(カスタム投稿タイプ時) WP_REST_Terms_Controller(カスタムタクソノミー時) となる。

たとえば book というカスタム投稿タイプを作り、APIのURLは /wp-json/wp/v2/books としたい場合、カスタム投稿タイプの登録時に以下のようなオプションを追加します。

register_post_type('book', [
    // (オプション中略)
    'show_in_rest' => true,
    'rest_base' => 'books',
]);

このようにしてから、以下のURLにアクセスすると

http://example.com/wp-json/wp/v2/books

カスタム投稿タイプ book の投稿一覧が取得できるようになりました。
もちろん、前述の filter などで結果を絞り込むことも可能です。

カスタムタクソノミーの情報を取得

基本的なところはカスタム投稿タイプと同じです。
book-category というカスタム投稿タイプを取得したければ、登録時の register_taxonomy() のオプションに以下を追加します。

register_taxonomy('book-category', [
    // (オプション中略)
    'show_in_rest' => true,
]);

このようにしてから、以下のURLにアクセスすると

http://example.com/wp-json/wp/v2/book-category

カスタムタクソノミー book-category の情報が取得できるようになりました。

参考

※ 今回の内容は、WordPress 4.5.2 および WP REST API 2.0 beta 12 で確認しています。