web-dev-qa-db-ja.com

ユーザーカスタムフィールドを追加する方法 REST APIレスポンス

私は次の関数を使ってユーザープロファイルにいくつかのカスタムフィールドを追加するWordPressテーマを書いています

function add_contact_methods( $profile_fields ) {
// Add Social Media Fields
$profile_fields['facebook']  = esc_html_e( 'Facebook URL', 'jldc' );
);

return $profile_fields;
}
add_filter( 'user_contactmethods', 'add_contact_methods' );

このフィールドの値がサーバーからのJSON応答に返されるように、これをREST AP​​Iに(プラグインのv2-beta13を使用して)接続する方法を教えてください。

私はそれに関する1つのチュートリアルを見つけました、そして私は結果のコードで終わりました:

function facebook_add_user_data() {
register_api_field( 'user',
    'facebook',
    array(
        'get_callback'  => 'facebook_get_user_field',
        'update_callback'   => null,
        'schema'            => array(
                                        'description'   => 'User Facebook URL',
                                        'type'          => 'string',
                                        'context'       => array( 'view' ),
                                ),
     )
);
}

add_action( 'rest_api_init', 'facebook_add_user_data' );

function facebook_get_user_field( $user, $field_name, $request ) {
    return get_user_meta( $user->id, $field_name);
}

要求を実行すると(../wp-json/wp/v2/users/2)、フィールドが表示されません。

これらのフィールドをどのようにフックしますか?

2
Cedon

わかった。私が見ていたチュートリアルが古く、間違ったWP関数を使っていたことがわかりました。私はregister_api_fieldを使っていましたが、正しいものはregister_rest_fieldです。

こんなふうになります...

function facebook_add_user_data() {
register_rest_field( 'user',
    'facebook',
    array(
        'get_callback'  => 'rest_get_user_field',
        'update_callback'   => null,
        'schema'            => null,
     )
);
}
add_action( 'rest_api_init', 'facebook_add_user_data' );

function rest_get_user_field( $user, $field_name, $request ) {
    return get_user_meta( $user[ 'id' ], $field_name, true );
}

試してみたところ、サーバーからの応答に「facebook」フィールドとユーザーのプロファイルからのURLが含まれていました。

また、実際にはfacebook_get_user_field関数を再利用することができるので、rest_get_user_fieldという名前に変更し、別のフィールド名でテストして、応答でそのデータも生成されるようにしました。

5
Cedon