【WordPress】WordPress REST APIで投稿データを外部アプリに配信する方法

【WordPress】WordPress REST APIで投稿データを外部アプリに配信する方法 WordPress

WordPressは標準でREST APIを備えており、投稿やページ、カスタム投稿タイプなどの情報をJSON形式で外部に配信できます。これにより、SPA(シングルページアプリケーション)やモバイルアプリ、外部のWebサービスと簡単に連携可能です。

この記事では、WordPressのREST APIで投稿データを取得し、外部アプリケーションに配信する基本的な方法とカスタマイズ方法を解説します。

標準のREST APIエンドポイントで投稿を取得する

WordPressはデフォルトで以下のようなエンドポイントを提供しています。

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

このURLにアクセスすると、最新の投稿一覧(デフォルト10件)がJSON形式で返されます。

特定の条件で投稿を絞り込む方法

REST APIではクエリパラメータを追加することで、投稿データをフィルタリングできます。

  • 特定のカテゴリの記事
    ?categories=3(カテゴリIDが3の記事)
  • 投稿数を増やす
    ?per_page=20
  • 特定のカスタム投稿タイプ
    /wp-json/wp/v2/<post_type>

例:イベント投稿タイプの一覧を取得する場合

https://example.com/wp-json/wp/v2/event?per_page=10

個別記事の詳細データを取得する

個別の投稿を取得したい場合は、IDを指定します。

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

このリクエストでは、IDが123の投稿データがJSONで返されます。

カスタムフィールド(ACF)も取得したい場合

ACF(Advanced Custom Fields)を使用している場合、標準のREST APIではフィールドは取得できません。
ACF Proを使用していれば、ACF REST API機能を有効化することで取得可能です。

https://example.com/wp-json/wp/v2/posts/123?acf_format=standard

または、テーマの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',
  ));
}

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を取得できます。

https://example.com/wp-json/myapi/v1/latest

まとめ

WordPress REST APIを活用すれば、投稿データを外部アプリケーションに柔軟に配信できます。標準機能でも基本的な取得は可能ですが、必要に応じてカスタムフィールドの追加やカスタムエンドポイントの作成で、さらに高度な情報提供が可能になります。

外部連携やフロントエンド分離(ヘッドレスCMS)を検討している方は、ぜひREST APIの活用を取り入れてみてください。