WordPressは標準でREST APIを備えており、投稿やページ、カスタム投稿タイプなどの情報をJSON形式で外部に配信できます。これにより、SPA(シングルページアプリケーション)やモバイルアプリ、外部のWebサービスと簡単に連携可能です。
この記事では、WordPressのREST APIで投稿データを取得し、外部アプリケーションに配信する基本的な方法とカスタマイズ方法を解説します。
標準のREST APIエンドポイントで投稿を取得する
WordPressはデフォルトで以下のようなエンドポイントを提供しています。
このURLにアクセスすると、最新の投稿一覧(デフォルト10件)がJSON形式で返されます。
特定の条件で投稿を絞り込む方法
REST APIではクエリパラメータを追加することで、投稿データをフィルタリングできます。
- 特定のカテゴリの記事:
?categories=3(カテゴリIDが3の記事) - 投稿数を増やす:
?per_page=20 - 特定のカスタム投稿タイプ:
/wp-json/wp/v2/<post_type>
例:イベント投稿タイプの一覧を取得する場合
投稿タイプ別のより詳しい取得方法はREST APIを使ったカスタム投稿データの取得方法で解説しています。
個別記事の詳細データを取得する
個別の投稿を取得したい場合は、IDを指定します。
このリクエストでは、IDが123の投稿データがJSONで返されます。
カスタムフィールド(ACF)も取得したい場合
ACF(Advanced Custom Fields)を使用している場合、標準のREST APIではフィールドは取得できません。ACF 5.11以降であれば、無料版・PRO版のどちらでもフィールドグループの「Show in REST API」を有効化することで取得可能です(ACF公式ブログで確認)。
または、テーマのfunctions.phpに以下のようなコードを追加することで、独自にフィールドを追加することも可能です。
function add_custom_fields_to_api($response, $post, $request) {
$custom_field = get_post_meta($post->ID, 'custom_key', true);
$response->data['custom_key'] = $custom_field;
return $response;
}
add_filter('rest_prepare_post', 'add_custom_fields_to_api', 10, 3);
認証が必要なAPIへのアクセス方法
非公開投稿や管理系APIにアクセスする場合は、認証が必要です。主な方法は以下の通りです。
- Application Passwords(WordPress 5.6以降)
- Cookie認証(同一ドメイン用)
- JWT(JSON Web Token)認証(プラグインで追加可能)
例えば、Application Passwordsを使ったベーシック認証形式は以下のようになります。
Authorization: Basic base64_encode("username:application-password")
カスタムエンドポイントを作成して配信データを制御する
必要に応じて独自のREST APIエンドポイントを作成することもできます。
function register_custom_api_route() {
register_rest_route('myapi/v1', '/latest/', array(
'methods' => 'GET',
'callback' => 'my_custom_api_callback',
'permission_callback' => '__return_true', // 公開エンドポイントであることを明示
));
}
function my_custom_api_callback($request) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 5,
);
$posts = get_posts($args);
$data = array();
foreach ($posts as $post) {
$data[] = array(
'title' => get_the_title($post),
'link' => get_permalink($post),
);
}
return rest_ensure_response($data);
}
add_action('rest_api_init', 'register_custom_api_route');
上記を追加することで、以下のようなエンドポイントから投稿タイトルとリンクのJSONを取得できます。
WordPress 5.5以降、
register_rest_route()でpermission_callbackを省略すると_doing_it_wrong()通知が発生します。誰でもアクセスできる公開エンドポイントにする場合は__return_trueを、権限チェックが必要な場合は適切な判定関数を指定してください。詳しくはヘッドレスCMS化への第一歩|REST APIを使って外部アプリと連携する方法でも解説しています。よくある質問(FAQ)
まとめ
WordPress REST APIを活用すれば、投稿データを外部アプリケーションに柔軟に配信できます。標準機能でも基本的な取得は可能ですが、必要に応じてカスタムフィールドの追加やカスタムエンドポイントの作成で、さらに高度な情報提供が可能になります。
外部連携やフロントエンド分離(ヘッドレスCMS)を検討している方は、ぜひREST APIの活用を取り入れてみてください。

