WordPress を利用するにあたっては、何らかのプラグインを導入することが常ではないでしょうか。
プラグインでは、そのプラグインで利用する独自のデータを**カスタムフィールド**で持つことが多いかと思います。
あるいはまた、標準で用意した項目では足りず、自前で何らかのカスタムフィールドを利用することもあるかと思います。
そういった運用をしている WordPress サイトに API でアクセスする場合、API でもそれらのカスタムフィールドにアクセスしたいことがあります。
しかし、デフォルトではそれらのカスタムフィールドにアクセスすることはできません。
カスタムフィールドにアクセスするためには、以下のいずれかの対応が必要になります。
register_rest_field する
例えばカスタムフィールドのキーが some_key だったとしたら、次のようになります。
// WordPress のバージョンによっては違うかも add_action('rest_api_init', function() { register_rest_field( 'post', 'some_key', array( 'get_callback' => function($post, $field_name, $request) { return get_post_meta($post['id'], $field_name, true); }, 'update_callback' => function($value, $post, $field_name) { return update_post_meta($post->ID, $field_name, $value); }, 'schema' => null, ) ); }); // なお get_callback の方の $post は連想配列で、update_callback の $post は WP_Post オブジェクト // なぜそのようになっているのかは謎だが、注意が必要
これを function.php に入れておくことで、投稿データに some_key というキーでアクセスできるようになります。
register_meta する
でも実は、カスタムフィールドは投稿のメタデータとして格納されるので、次の register_meta だけでもアクセスできるようになります。
register_meta('post', 'some_key', ['show_in_rest'=>true, 'single'=>true]);
この場合は、投稿データの meta の子供の some_key でアクセスできるようになります。