J'ai ce code, mais ce que j'obtiens dans le navigateur, ce sont tous les champs - même ceux stockés sous les noms Int et Bool dans SQL - sous forme de chaînes.
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;
}
J'ai essayé return json_encode($res)
mais cela n'a pas aidé. Comment puis-je obtenir un objet avec des nombres et des booléens dans json.
Le type de sortie de chaîne est attendu pour les résultats de la requête $wpdb
, les types de données de la base de données ne sont pas mappés aux types de données PHP correspondants.
Vous devrez vous en occuper vous-même, comme:
$data = [
'int' => (int) '123',
'bool' => (bool) '1',
'string' => (string) 'abc'
];
return rest_ensure_response( $data );
avec la réponse de repos:
{"int":123,"bool":true,"string":"abc"}
Voici une approche intéressante de Matthew Boynes, pour le gérer automatiquement dans wpdb
avec un wrapper personnalisé.
Notez que vous pouvez utiliser wpdb::get_row
pour obtenir une seule ligne.