add_action('init', function() {
function get_user_by_chat_id( WP_REST_Request $userChatId ){
$user = get_users(array('meta_key' => 'chatid', 'meta_value' => (int) $userChatId['id']));
if ( empty( $user ) )
return new WP_Error( 'no_users', 'User with this chat id not found', [ 'status' => 404 ] );
return $user;
}
});
add_action( 'rest_api_init', function(){
register_rest_route( 'wc/v3', 'customers?meta_data={"chatid":"(?P<id>\d+)"}', [
'methods' => 'GET',
'callback' => 'get_user_by_chat_id',
] );
} );
Написал так. Все равно отдаёт список всех пользователей. Дополнительное поле chat_id создано и заполнено в админке. print_r($user) правильно выводит.
Не подскажете в чем ошибка ?
P.S. Создаю простой плагин и пишу весь код в нем
Не уверен, что в WP можно создавать роуты с гет-запросом. Проще сделать вот так:
add_action('init', function() {
function get_user_by_chat_id(){
$request = json_decode($_GET['meta_data']);
$user = get_users(array('meta_key' => 'chatid', 'meta_value' => (int) $request['chatid']));
if ( empty( $user ) )
return new WP_Error( 'no_users', 'User with this chat id not found', [ 'status' => 404 ] );
return $user;
}
});
add_action( 'rest_api_init', function(){
register_rest_route( 'wc/v3', 'customers2', [
'methods' => 'GET',
'callback' => 'get_user_by_chat_id',
] );
} );
Возможно, ошибка в этом. На роут /customers2 - отправляете тот же GET - metadata={"chatid":"123"} (лучше, кстати JSON не в GET, а в теле или поле POST запроса передавать)
Так же, отдельно проверьте функцию get_user_by_chat_id. Работает ли она. Если нет - значит, фильтруете неправильно.