我希望register_rest_field仅在请求特定用户时为用户返回某个字段(即请求是/ user / $ user_id) - 而不是在使用/ users或其他端点时。
我可以想到的一种方法是检查register_rest_field函数中的API请求URL,并根据端点有条件地更改返回值,但我不知道如何访问该URL。
最好的方法是什么?
答案 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