API de WP que devuelve resultados de SQL como cadenas, en lugar de números

4

Tengo este código, pero lo que obtengo en el navegador son todos los campos, incluso aquellos almacenados como Int y Bool en SQL, como cadenas.

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;
}

Intenté return json_encode($res) pero eso no ayudó. ¿Cómo puedo obtener un objeto enviado con números y valores booleanos en json?

    
pregunta Simon H 15.04.2017 - 14:53

1 respuesta

3

El tipo de salida de cadena se espera para los resultados de consulta $wpdb , los tipos de datos db no se asignan a los tipos de datos PHP correspondientes.

Tendrá que cuidarlo usted mismo, como:

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

return rest_ensure_response( $data );

con la respuesta del resto:

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

Aquí hay un enfoque interesante por Matthew Boynes, para manejarlo automáticamente en wpdb con un envoltorio personalizado.

Tenga en cuenta que puede usar wpdb::get_row para obtener una sola fila.

    
respondido por el birgire 15.04.2017 - 20:46

Lea otras preguntas en las etiquetas