WordPress REST APIで投稿データを外部に配信する方法

Cocoonカスタマイズ集
この記事は約5分で読めます。
記事内に広告が含まれています。

はじめに

WordPressには、外部に任意の情報を提供するための機能が標準で備わっています。

そのため、WordPress REST APIを利用すれば、クロスドメインの制限に関係なく外部から任意の情報をJSON形式で取得できます。

この記事では、この方法について説明します。

標準REST APIで投稿データを取得する方法

WordPressのカスタム投稿タイプや標準投稿は、show_in_rest => trueを設定すれば自動的にREST APIに公開されます。

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

投稿タイプnewsを公開する例

WordPressのカスタム投稿タイプmy_newsをREST API で扱えるように公開するには、show_in_rest => trueを設定します。

register_post_type('my_news', [
  'label'        => 'ニュース',         // 投稿タイプ名
  'public'       => true,               // 公開状態
  'has_archive'  => true,               // アーカイブページ
  'show_in_rest' => true,               // REST API
  'supports'     => ['title', 'editor', 'excerpt', 'thumbnail'],  // 編集画面の項目
]);

カスタムフィールドを追加する例

rest_prepare_{$this->post_type}を使うと、標準の投稿データに独自のデータ(my_custom_key)を追加できます。

add_filter('rest_prepare_post', function ($response, $post, $request) {
  $custom_field = get_post_meta($post->ID, 'my_custom_key', true);
  $response->data['my_custom_key'] = $custom_field;

  return $response;
}, 10, 3);

例えば以下とすれば投稿ID=123の情報をJSON形式で取得できます。

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

カスタムエンドポイントを作って独自のデータを提供する方法

場合によっては、標準REST APIの構造に従わず、任意のJSON形式で最新情報などを返したいことがあります。その場合はregister_rest_route()を使います。

最新の投稿5件を返すカスタムAPIの例を示します。

以下のURLから最新投稿データを取得できます。

/**
 * 最新の投稿データを返すコールバック関数
 *
 * @param WP_REST_Request $request REST APIのリクエストオブジェクト
 * @return WP_REST_Response|WP_Error JSONレスポンスデータ
 */
if (!function_exists('custom_api_callback')):
function custom_api_callback($request) {
  // 最新の投稿5件を取得
  $args = [
    'post_type'      => 'post',
    'posts_per_page' => 5,
    'post_status'    => 'publish',
  ];
  $posts = get_posts($args);

  $data = [];

  // 投稿データを配列に追加
  foreach ($posts as $post) {
    $data[] = [
      'id'    => $post->ID,
      'title' => get_the_title($post),
      'link'  => get_permalink($post),
    ];
  }

  // JSON形式で返却
  return rest_ensure_response($data);
}
endif;


// REST API初期化時にエンドポイントを登録
add_action('rest_api_init', function () {
  register_rest_route(
    'myapi/v1',
    '/latest/',
    [
      'methods'             => WP_REST_Server::READABLE,
      'callback'            => 'custom_api_callback',
      'permission_callback' => '__return_true',
    ]
  );
});

以下のエンドポイントにアクセスすると、最新の投稿5件などを、任意の形式でJSON形式で取得できます。

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

標準REST APIとカスタムエンドポイントの違い

表1に標準REST APIとカスタムエンドポイントの違いをし絵飯ます。

標準REST APIとカスタムエンドポイントの違い
項目標準REST API
(show_in_rest)
カスタムエンドポイント
(register_rest_route)
URL/wp-json/wp/v2/{post_type}/wp-json/myapi/v1/{endpoint}
JSON構造WordPress標準形式自由に設計可能
CRUD自動で使用可能自分で実装する必要あり
カスタムフィールドや画像URLregister_rest_field()で追加可能コールバック内で自由に追加可能
利用シーン標準投稿タイプの取得、外部連携特定の形式でデータ提供、特定の集計や加工を含むデータ提供

さいごに

今回紹介した方法を使えば、WordPress REST APIを活用して標準投稿やカスタム投稿のデータを外部に配信したり、独自形式のJSONデータを提供することができます。
これにより、他のサービスやアプリケーションと連携しやすくなり、データの取得・活用の幅が広がります。
標準APIとカスタムエンドポイントの違いを理解し、用途に応じて使い分けることで、効率的かつ柔軟にWordPressデータを外部公開できます。

タイトルとURLをコピーしました