AJAX, qui fait partie d'Elasticpress, ressemble à ceci
$.ajax( {
url: epas.endpointUrl,
type: 'GET',
dataType: 'json',
crossDomain: true,
data: JSON.stringify( query )
} );
De plus j'ai enregistré mon endpoint
add_action( 'rest_api_init', function ( $data ) {
register_rest_route( 'elasticpress', '/autosuggest/', [
'methods' => 'GET',
'callback' => 'ep_autosuggest'
] );
} );
Le rappel ressemble à ceci
function ep_autosuggest( $data ) {
// Elasticsearch PHP Client
$client = ClientBuilder::create()->build();
$params = [
'index' => 'index',
'type' => 'post',
'body' => $data
];
$response = $client->search( $params );
return $response;
}
Les différentes parties fonctionnent comme il se doit. J'ai du mal à obtenir les données de l'objet transmis. Des idées?
Après quelques inspections du WP_REST_Request , il s’est avéré que la méthode get_body()
était celle que je cherchais. Quoi qu'il en soit, c'est ce que j'ai fini avec:
add_action( 'rest_api_init', function() {
register_rest_route( 'ep', '/as/', [
'methods' => \WP_REST_Server::CREATABLE,
'callback' => 'ep_autosuggest',
] );
} );
function ep_autosuggest( WP_REST_Request $data ) {
// Elasticsearch PHP Client
$client = ClientBuilder::create()->build();
$params = [
'index' => 'ep-test',
'type' => 'post',
'body' => $data->get_body()
];
$response = $client->search( $params );
return $response;
}
Pour ceux que ça intéresse, j'en ai fait un plugin:
https://github.com/grossherr/elasticpress-autosuggest-endpoint
Merci pour le plugin Nicolai! Je voulais juste souligner quelques points qui n'étaient pas clairs pour moi:
Une fois le plugin installé, modifiez ep_autosuggest () dans élastiquepress-autosuggest-endpoint.php:
$params = [
'index' => ep_get_index_name(), // get name of ES index dynamically
'type' => 'post',
'body' => $data->get_body()
];
Ensuite, utilisez http (s): //votrenomdedomaine.com/wp-json/elasticpress/autosuggest/ (ou tout autre élément spécifié dans register_rest_route ()) en tant qu'URL de point de terminaison dans admin/ElasticPresss/Autosuggest/Settings.