私は次の関数を使ってユーザープロファイルにいくつかのカスタムフィールドを追加する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 APIに(プラグインの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)、フィールドが表示されません。
これらのフィールドをどのようにフックしますか?
わかった。私が見ていたチュートリアルが古く、間違った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
という名前に変更し、別のフィールド名でテストして、応答でそのデータも生成されるようにしました。