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」にカスタムフィールドをフックしましょう!