WordPress REST API で、カスタム投稿タイプなどの情報を取得する
ちょいちょい使う機会も増えてきた WordPress の REST API ですが、カスタム投稿タイプやカスタムタクソノミー関連のデータ取得が必要な機会がありましたので、方法をまとめておきます。ひと手間だけかかる感じでした。
まずは軽くおさらい。
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 で確認しています。