WP API возвращает результаты SQL как строки, а не числа

У меня есть этот код, но то, что я получаю в браузере, – это все поля – даже те, которые хранятся как Int и Bool в SQL – как строки.

add_action( 'rest_api_init', function () { register_rest_route( 'restos/v1', '/resto/(?P<qname>.*)', array( 'methods' => 'GET', 'callback' => 'handle_get', 'permission_callback' => function () { return current_user_can( 'edit_others_posts' ); } ) ); } ); function handle_get( $data ) { global $wpdb; $query = "SELECT * FROM `restaurants` WHERE `qname` = '".$data['qname']."' LIMIT 1"; $res = $wpdb->get_results($query)[0]; return $res; } 

Я попытался return json_encode($res) но это не помогло. Как я могу получить объект, посланный с числами и булевыми в json.

Solutions Collecting From Web of "WP API возвращает результаты SQL как строки, а не числа"

Тип вывода строки ожидается для $wpdb запроса $wpdb , типы данных db не сопоставляются с соответствующими типами данных PHP.

Вам придется позаботиться о себе, например:

 $data = [ 'int' => (int) '123', 'bool' => (bool) '1', 'string' => (string) 'abc' ]; return rest_ensure_response( $data ); 

с остальным ответом:

 {"int":123,"bool":true,"string":"abc"} 

Вот интересный подход Мэтью Бойнса, чтобы обрабатывать его автоматически в wpdb с помощью специальной оболочки.

Обратите внимание, что вы можете использовать wpdb::get_row для получения одной строки.