Close

Web技術Tips

Homepage Tips Homepage Tips

ホームWeb技術TipsWP REST APIで独自エンドポイントを登録しキャッシュする方法【WP REST Cache】

SHARE

SHARE

WordPress 2022.11.18(公開)

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-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 );

エンドポイントが Active になった

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

設定は以上です。

DOE(横浜)のニュースとブログ

News News

横浜のWeb制作会社DOEはホームページ制作に関連するWeb技術、Webデザイン、SEO対策情報など人気&おすすめ記事を随時公開中です。
尚、Twitterでは現場の声がリアルタイム配信中です。良かったらShareして繋がってください。