如何为一些但不是所有端点返回register_rest_field?

时间:2017-02-06 23:02:32

标签: wordpress rest

我希望register_rest_field仅在请求特定用户时为用户返回某个字段(即请求是/ user / $ user_id) - 而不是在使用/ users或其他端点时。

我可以想到的一种方法是检查register_rest_field函数中的API请求URL,并根据端点有条件地更改返回值,但我不知道如何访问该URL。

最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

<?php 

add_filter( 'rest_prepare_user', 'mo_user_json', 10, 3);
function mo_user_json( $data, $user, $request ) {
    $response_data = $data->get_data();
    // for remove fields
    unset($response_data['avatar_urls']);
    unset($response_data['url']);
    unset($response_data['description']);
    // array user meta
    $usermetas = [];
    $metas = [
        'field1',
        'field2',
        'field3',
        'field4',
        'field5',
        'field6',
    ];
    foreach ($metas as $meta) {
        if(!empty(get_user_meta( $user->ID, $meta))){
            $info = get_user_meta( $user->ID, $meta);
            $usermetas[$meta] = $info[0];
        }
    }
    // format json
    $nodes = [
        'field1'    => $usermetas['field1']
        'field2'    => $usermetas['field2']
        'field3'    => $usermetas['field3'],
        'field4'    => [
            'field4'    => $usermetas['field4']
            'field5'    => $usermetas['field5']
            'field6'    => $usermetas['field6']
        ]
    ];
    foreach ($nodes as $key => $node) {
        $response_data['meta'][$key] = $node;
    }
    // add fields formated in json
    $data->set_data( $response_data );
    return $data;
}

答案 1 :(得分:0)

您可以使用$ request-&gt; get_url_params();检查请求是否有$ user_id。

价:

https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/#arguments