WP REST APIのv2でフック名が変わってる!

WP REST APIを使えば、Wordpressのサイトを割と簡単にスマホアプリ化できます。

そんな便利なWP REST APIですが、独自フィールドなどはデフォルトの状態で取得できません。

今回は、プラグインのWordPress Popular PostsのビューカウントをAPIで取得したかったのですが、かなり大変だったので情報を書き残しておきます。

json_prepare_postにv2ではフックできない

結論から言いますとバージョン2のWP REST APIはフック名が変わっています。

WP REST API v1の時は、以下のようにjson_prepare_postにフックさせればよかったわけですがv2ではうまくいきません。

以下は、ポストIDからメタキーの値を探してAPIで返すコードです。

//function.php

add_filter( 'json_prepare_post', function ($data, $post, $context) {
$data['meta'] = get_post_meta( $post['ID']);
return $data;
}, 10, 3 );

http://(domain)/wp-json/wp/v2/posts とAPIを試しに叩いてみても、結果に変化がありません・・・。

v2でフック名がrest_prepare_postに変更

これはおかしいと思い調べていたところ、ほとんどv1の情報ばかりでしたが、原因がわかりました!

json_prepare_post → rest_prepare_post

上記のようにバージョン2からフック名「json_prepare_post」が変更になっていたようです。

ということで、以下のように「rest_prepare_post」にしたところ見事ビューカウントを取得することができました!

//function.php

add_filter( 'rest_prepare_post', function ( $response, $post, $request ) {
    $response->data['post_meta'] = array(
        'views' => wpp_get_views($post->ID),
    ); 
    return $response;
}, 10, 3 );

wpp_get_viewsで取得したページのカウント数を、レスポンス時の値に追加して取得しています。

WP REST APIのv2のフック名を間違えないように

v1の記事ばかりで情報が少ないので、私と同じように誤って「json_prepare_post」でハマっている方のためになればと思います。

v2は「rest_prepare_post」にカスタムフィールドをフックしましょう!

コメントを残す

*