wp-json/wp/v2/users/1
レスポンスでユーザーの姓と名を取得しようとしていますが、v2に切り替えてからこれらの詳細がすべて失われています。
私が試してみました:
function mm_wpapiv2_user_first_name($object, $field_name, $request) {
return "Test";
}
register_rest_field( 'user', 'first_name',
array('get_callback' => 'mm_wpapiv2_user_first_name')
);
しかし、フィールドはレスポンスに追加されていません。助けてください!
user の応答をフィルタリングして、 rest_prepare_user
で必要なプロパティを含めることができます。
add_filter( 'rest_prepare_user', function( $response, $user, $request ) {
$response->data[ 'first_name' ] = get_user_meta( $user->ID, 'first_name', true );
$response->data[ 'last_name' ] = get_user_meta( $user->ID, 'last_name', true );
return $response;
}, 10, 3 );
もう1つの方法は、残りのフィールドを登録 するだけでなく 、既存の非表示アイテムに対してパブリックに表示されるようにコンテキストを更新することです。
/**
* Return field data for User
*
* @param array $object
* @param string $field_name
* @param WP_REST_Request $request
*
* @return string
*/
function get_rest_api_field_data( $object, $field_name, $request ) {
switch ( $field_name ) {
case 'first_name' :
return get_user_meta( $object[ 'id' ], 'first_name', true );
case 'last_name' :
return get_user_meta( $object[ 'id' ], 'last_name', true );
}
}
/**
* Register fields for User
*/
function add_custom_rest_fields_for_users() {
// register the First Name of the User -- Visible to anyone
register_rest_field( 'user', 'first_name', array (
'get_callback' => 'get_rest_api_field_data',
'update_callback' => null,
'schema' => array (
'description' => __( 'First name for the resource.' ),
'type' => 'string',
'context' => array ( 'embed', 'view', 'edit' ), // Adding `embed` and `view`
'arg_options' => array (
'sanitize_callback' => 'sanitize_text_field',
),
),
) );
// register the Last Name of the User -- Visible to anyone
register_rest_field( 'user', 'last_name', array (
'get_callback' => 'get_rest_api_field_data',
'update_callback' => null,
'schema' => array (
'description' => __( 'Last name for the resource.' ),
'type' => 'string',
'context' => array ( 'embed', 'view', 'edit' ), // Adding `embed` and `view`
'arg_options' => array (
'sanitize_callback' => 'sanitize_text_field',
),
),
) );
}
add_action( 'rest_api_init', 'add_custom_rest_fields_for_users' );
元の応答は、フィルターが呼び出される直前に作成されました。 prepare_item_for_response()
にあるように、$schema['properties']
またはfirst_name
を追加する前にlast_name
がチェックされます。
if ( ! empty( $schema['properties']['first_name'] ) ) {
$data['first_name'] = $user->first_name;
}
if ( ! empty( $schema['properties']['last_name'] ) ) {
$data['last_name'] = $user->last_name;
}
get_item_schema ()
で、この schema がどのように作成されたかを確認できます-欠落している'embed', 'view'
に注意する価値があります。 認証なし およびより一意の 条件 でレンダリングされます。
$schema = array(
'$schema' => 'http://json-schema.org/draft-04/schema#',
'title' => 'user',
'type' => 'object',
'properties' => array(
'id' => array(
'description' => __( 'Unique identifier for the resource.' ),
'type' => 'integer',
'context' => array( 'embed', 'view', 'edit' ),
'readonly' => true,
),
'username' => array(
'description' => __( 'Login name for the resource.' ),
'type' => 'string',
'context' => array( 'edit' ),
'required' => true,
'arg_options' => array(
'sanitize_callback' => 'sanitize_user',
),
),
'name' => array(
'description' => __( 'Display name for the resource.' ),
'type' => 'string',
'context' => array( 'embed', 'view', 'edit' ),
'arg_options' => array(
'sanitize_callback' => 'sanitize_text_field',
),
),
'first_name' => array(
'description' => __( 'First name for the resource.' ),
'type' => 'string',
'context' => array( 'edit' ),
'arg_options' => array(
'sanitize_callback' => 'sanitize_text_field',
),
),
'last_name' => array(
'description' => __( 'Last name for the resource.' ),
'type' => 'string',
'context' => array( 'edit' ),
'arg_options' => array(
'sanitize_callback' => 'sanitize_text_field',
),
),