您可以使用过滤器rest_prepare_user
我想这样的事情应该会奏效。
function my_rest_prepare_user( WP_REST_Response $response, WP_User $user, WP_REST_Request $request ){
if( in_array( \'administrator\', $user->roles ) ){
$data = $response->get_data();
$data[\'custom_field\'] = get_user_meta( $user->ID, \'custom_field\', true );
$response->set_data( $data );
}
return $response;
}
add_filter( \'rest_prepare_user\', \'my_rest_prepare_user\', 10, 3 );
EDIT
如果需要更新用户,可以注册自定义路由
function yoursite_update_user( WP_REST_Request $request ){
$user = get_user_by( \'id\', $request->get_param( \'id\' ) );
if( $user && in_array( \'administrator\', $user->roles ) ){
$value = $request->get_param( \'my_field\' );
update_user_meta( $request->get_param( \'id\' ), \'my_field\', $value );
return new WP_REST_Response( [
\'code\' => \'user_updated\',
\'message\' => \'User Updated\'
], 200 );
} else {
return new WP_REST_Response( [
\'code\' => \'invalid_user\',
\'message\' => \'Invalid user\'
], 404 );
}
}
register_rest_route( \'yoursite/v1\', \'/users/update_my_field/(?P<id>\\d+)\', array(
\'methods\' => WP_REST_Server::EDITABLE,
\'callback\' => \'yoursite_update_user\',
\'permission_callback\' => function () {
return current_user_can( \'edit_users\' );
},
\'args\' => array(
\'id\' => array(
\'validate_callback\' => function ( $param, $request, $key ) {
return is_numeric( $param );
}
),
),
) );
上述路由将由经过身份验证的
POST 请求收件人:
http:://yoursite.com/wp-json/yoursite/v1/users/update_my_field/{USER_ID} 带有post字段
my_field