はじめに
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 (show_in_rest) | カスタムエンドポイント (register_rest_route) |
|---|---|---|
| URL | /wp-json/wp/v2/{post_type} | /wp-json/myapi/v1/{endpoint} |
| JSON構造 | WordPress標準形式 | 自由に設計可能 |
| CRUD | 自動で使用可能 | 自分で実装する必要あり |
| カスタムフィールドや画像URL | register_rest_field()で追加可能 | コールバック内で自由に追加可能 |
| 利用シーン | 標準投稿タイプの取得、外部連携 | 特定の形式でデータ提供、特定の集計や加工を含むデータ提供 |
さいごに
今回紹介した方法を使えば、WordPress REST APIを活用して標準投稿やカスタム投稿のデータを外部に配信したり、独自形式のJSONデータを提供することができます。
これにより、他のサービスやアプリケーションと連携しやすくなり、データの取得・活用の幅が広がります。
標準APIとカスタムエンドポイントの違いを理解し、用途に応じて使い分けることで、効率的かつ柔軟にWordPressデータを外部公開できます。


