WordPressのREST APIでカスタムフィールドを表示する

REST APIを使って投稿のデータを取得したとき、デフォルトではカスタムフィールドが含まれないのでなんとかするという話。

大きく分けてプラグインを利用するか自前実装するかの二択となる。

プラグインを利用する

いくつかある。

ACF to REST API

Advanced Custom Fieldsで定義したカスタムフィールドをAPIの出力に含めることができる。

定番ぽいがAdvanced Custom Fieldsを利用していない場合は使えないのがネック。
というわけで今回の自分のケースでは使えなかった。

WP REST API Controller

カスタム投稿タイプごとのオンオフ、各カスタムフィールドのオンオフが簡単にできていいかんじ。

しかしなぜか一部のカスタム投稿タイプしか有効にできないという問題があって使えなかった。

デバッグモードで動かしているとAPI出力にPHPのNoticeが出たりするのでどこか詰めが甘いっぽい。

REST API Custom Fields

カスタムフィールドごとにオンオフできる。

最初、表示させたいカスタムフィールドが一覧にないぞ?と思ったら複数のカスタム投稿タイプに定義されているカスタムフィールドはUniversal metasにまとまっていて一括でオンオフできるのだった。
便利。(場合によっては細かい融通が利かないということでもあるが)

アップデートが1年前で止まっているのが気になるがとりあえずこれで用は足りるので採用。

なおカスタム投稿タイプのオンオフはできないのでカスタム投稿タイプを登録するプラグインで設定するか、自前実装の場合はregister_post_typeのオプションでshow_in_restをtrueにしておく必要がある。

自前実装する

add_actionでrest_api_initのフックを使ってやればいいらしい。

今回はこちらの手段を取る気はないので割愛。

上記のような既成のプラグインの動作に満足できなければこれを使うことになる。

参考: https://ja.wp-api.org/extending/modifying/