プログラミング初心者にオススメ

【WordPress】WP REST API register_rest_field()でレスポンスの情報を変更する

どうも。みずかず(@mizukazu_1)です。

今回はWordPressでregister_rest_field()を使用してWP REST APIのレスポンス情報を変更する方法を書いていきます。

デフォルトのレスポンスだと必要な情報が入っておらず自分でデータを追加したい!と思う事もあると思います。

僕はこの間まで猫の画像を投稿するサイトをお試しで作っていましてその際にWP REST APIを使用したのですが、レスポンスの情報に追加したいデータがあってこの関数を使用しました。

使い方

まずは公式のドキュメントから引用したものを載せます。

例:投稿レスポンスに投稿メタを表示

<?php
add_action( 'rest_api_init', 'slug_register_starship' );
function slug_register_starship() {
    register_rest_field( 'post',
        'starship',
        array(
            'get_callback'    => 'slug_get_starship',
            'update_callback' => null,
            'schema'          => null,
        )
    );
}

/**
 * "starship"フィールドの値を取得
 *
 * @param array $object 現在の投稿の詳細データ
 * @param string $field_name フィールド名
 * @param WP_REST_Request $request 現在のリクエスト
 *
 * @return mixed
 */
function slug_get_starship( $object, $field_name, $request ) {
    return get_post_meta( $object[ 'id' ], $field_name, true );
}

WP REST APIより引用

add_actionを使用して関数をフック

まずadd_actionを使用して第1引数にrest_api_initを設定してフックさせます。。
APIの初期化時ってことですね。

slug_register_starship()の中身を見ていく

第2引数にコールバック関数としてslug_register_starship()を設定します。

slug_register_starship()が何をやっているか中身を見ていきます。
まず第1引数でフィールドを追加したい投稿タイプを設定します。

ここではpostなので投稿のフィールドに値が追加されます。

第2引数でstarshipというテキストを設定していますがこちらがレスポンス時のフィールド名です。
なのでレスポンスにstarshipというプロパティが追加されます。

第3引数には配列を設定しています。
get_callbackにはさらにコールバック関数を設定しています。

update_callbackとschemeについてはnullを設定しているのでこの記事ではスルーします。

slug_get_starship()の中身を見ていく

get_callbackに設定されたslug_get_starship()の中身を見ていきます。

この関数は単純でreturnでメタ情報を返却しているだけです。

実際に使用した例

次に僕自身が実際に使用した時の例を以下にのせます。
例よりは分かりやすいと思います。

例:カスタム投稿に投稿者の情報を追加する

/**
 * APIのレスポンスに投稿者を含めるように設定
 */
add_action('rest_api_init', 'add_api_fields');
function add_api_fields() {
  register_rest_field('cat_post', 'cat_post_author', [
    'get_callback' => function() {
      return get_the_author();
    }
  ]);
}

add_action()を使用してAPIの初期化時にフックさせ、add_api_fields()を呼び出します。

add_api_fields()の中ではregister_rest_field()を呼び出してcat_postというカスタム投稿タイプにcat_post_authorというフィールドを追加しています。

第3引数に配列を指定してget_callbackに無名関数で投稿者を返しています。

まとめ

テキスト多めで長くなりましたがregister_rest_field()でレスポンスの情報を変更する方法は以上になります。

  1. add_actionでrest_api_initにフック
  2. add_actionのコールバック関数の中で投稿タイプと追加するフィールド名、さらにコールバック関数を設定する
  3. regster_rest_fieldのコールバック関数の中で実際に処理を書いていく

ざっとまとめると以上になるかと思います。

公式のドキュメントも日本語版がありますが多少分かりづらい部分があります。
読みながら、手を動かしながらで覚えていくと良いと思います!