WP REST APIで独自エンドポイントを登録しキャッシュする方法【WP REST Cache】
WP REST API で呼び出す投稿データの数が数千件や数万件になりそうなら、API のデータをキャッシュしたほうがいいです。
この記事では WP REST API の独自エンドポイントを追加する方法と、キャッシュを保存する方法を書いていきます。
API のキャッシュの保存には『WP REST Cache』というプラグインを使用します。
WP REST Cache は一度キャッシュに登録しておくと、投稿の更新や削除をした時に自動でキャッシュの内容が更新されて便利です。
独自エンドポイントの追加方法
register_rest_route() 関数でエンドポイントを設定します。
以下のコードでは /wp-json/vendor/v0/post をエンドポイントに指定しています。
function prefix_register_custom_route() {
///wp-json/vendor/v0/post
register_rest_route('vendor/v0', '/post/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'prefix_get_items',
'permission_callback' => '__return_true',
));
}
add_action('rest_api_init', 'prefix_register_custom_route');
function prefix_get_items($request) {
$data = array();
$arg = array(
'nopaging' => true,
'post_type' => 'post',
'orderby' => array('menu_order' => 'ASC', 'date' => 'DESC')
);
$post_query = new WP_Query($arg);
if($post_query->have_posts()) {
while($post_query->have_posts()) {
$post_query->the_post();
$id = esc_attr(get_the_ID());
$title = esc_html(get_the_title());
$data[] = array(
'id' => intval($id),
'title' => $title
);
}
}
return rest_ensure_response($data);
}
/wp-json/vendor/v0/post にアクセスすると以下のような JSON が返されます。

キャッシュプラグイン『WP REST Cache』のインストール

WP REST Cache はプラグイン一覧からインストールします。
プラグインの設定は特にありません。
プラグイン用の設定を追加する
プラグインを有効化した後は WP REST Cache にエンドポイントを登録する設定が必要になります。
デフォルトでアクセスできるエンドポイントであれば(wp-json/wp/v2/post のような)特に設定をしなくてもアクセスするだけで自動で登録されます。
一方で独自エンドポイントの場合はフィルターフックを使ってプラグイン用の設定をしないと登録されません。
登録設定をしないと独自エンドポイントが認識されなかったり、オブジェクトタイプが unknown になったりします。
//WP REST Cache: 独自エンドポイントを登録
function wprc_add_acf_posts_endpoint ($endpoints) {
if (!isset($endpoints['vendor/v0']) || !in_array('post', $endpoints['vendor/v0'])) {
$endpoints[ 'vendor/v0' ][] = 'post';
}
return $endpoints;
}
add_filter('wp_rest_cache/allowed_endpoints', 'wprc_add_acf_posts_endpoint', 10, 1);
//WP REST Cache: 独自エンドポイントのオブジェクトタイプを登録
function wprc_determine_object_type($object_type, $cache_key, $data, $uri) {
if ($object_type !== 'unknown') {
return $object_type;
}
if(strpos($uri, 'vendor/v0/post')) {
$object_type = 'post';
}
return $object_type;
}
add_filter( 'wp_rest_cache/determine_object_type', 'wprc_determine_object_type', 10, 4 );

WP REST Cache のオプションページで Endpoint API Caches をクリックするとキャッシュの一覧が表示されます。
Object Type が対応する投稿タイプになり、Active がチェックマークになっていればキャッシュが正常に動作します。
設定は以上です。