我有这段代码,但我在浏览器中得到的是所有字段,甚至是那些在SQL中存储为Int和Bool的字段,都是字符串。
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中带有数字和布尔值的对象。
最合适的回答,由SO网友:birgire 整理而成
字符串输出类型应为$wpdb
查询结果中,db数据类型未映射到相应的PHP数据类型。
你必须自己照顾它,比如:
$data = [
\'int\' => (int) \'123\',
\'bool\' => (bool) \'1\',
\'string\' => (string) \'abc\'
];
return rest_ensure_response( $data );
对于rest响应:
{"int":123,"bool":true,"string":"abc"}
Here\'s Matthew Boynes的一种有趣的方法,在
wpdb
使用自定义包装。
请注意,您可以使用wpdb::get_row
获得一行。