为特定用户注册REST字段

时间:2017-03-10 作者:Michele Fortunato

我正在用一个自定义插件扩展Wordpress REST API,我需要在用户响应中添加一个新字段。

问题是,此字段只能出现在用户角色的底部。

例如,我想要一个字段custom_field 仅当用户administrator 而不是contributor.

目前我正在使用register_rest_field() 函数,但它只允许我选择对象的类型。

你知道这个问题是否有解决方法吗?或者你知道更好的方法来达到同样的结果吗?

P、 S.我正在使用WP 4.7.3

2 个回复
最合适的回答,由SO网友:Michele Fortunato 整理而成

我找到了一个更好的解决方法,使用了由@BenCasey in建议的相同过滤器his answer.

首先我通过注册register_rest_field 数据库中所有用户类型的所有自定义字段。

然后在rest_prepare_user, 我没有添加想要的字段,而是删除了不需要的字段。这样,我仍然可以使用相同的端点来更新字段。

下面是JSON清理的示例。

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();

        unset($data[\'custom_field\']);

        $response->set_data( $data );

    }

    return $response;

}
add_filter( \'rest_prepare_user\', \'my_rest_prepare_user\', 10, 3 );

SO网友:Ben Casey

您可以使用过滤器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

相关推荐

Get users that likes the post

我有一个类似ajax的帖子系统,当用户喜欢帖子时,系统会在帖子中添加一个帖子元,并将其命名为(post\\u liked\\u users)。post\\u likes\\u users元值示例:a:1:{s:6:\"user-1\";i:1;}现在,如何才能获得喜欢该帖子的用户?注意:我不能像杰克·约翰逊那样只使用foreach答案,我必须使用WP\\u User\\u Query或WP\\u Query,因为我要使用offest和number。