AJAX是Elasticpress的一部分,如下所示
$.ajax( {
url: epas.endpointUrl,
type: \'GET\',
dataType: \'json\',
crossDomain: true,
data: JSON.stringify( query )
} );
此外,我还注册了我的端点
add_action( \'rest_api_init\', function ( $data ) {
register_rest_route( \'elasticpress\', \'/autosuggest/\', [
\'methods\' => \'GET\',
\'callback\' => \'ep_autosuggest\'
] );
} );
回调如下所示
function ep_autosuggest( $data ) {
// Elasticsearch PHP Client
$client = ClientBuilder::create()->build();
$params = [
\'index\' => \'index\',
\'type\' => \'post\',
\'body\' => $data
];
$response = $client->search( $params );
return $response;
}
不同的部件工作正常。我正在努力从传递的对象获取数据。有什么想法吗?
最合适的回答,由SO网友:Nicolai Grossherr 整理而成
在对WP_REST_Request, 事实证明get_body()
方法就是我要找的方法。总之,这就是我的结局:
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;
}
对于任何感兴趣的人,我用它制作了一个插件:
https://github.com/grossherr/elasticpress-autosuggest-endpoint
SO网友:Dmitriy
感谢Nicolai插件!我只是想指出一些我不清楚的事情:
安装插件后,在elasticpress autosuggest endpoint中修改ep\\U autosuggest()。php:
$params = [
\'index\' => ep_get_index_name(), // get name of ES index dynamically
\'type\' => \'post\',
\'body\' => $data->get_body()
];
然后,使用http://您的域名。com/wp-json/elasticpress/autosuggest/(或register\\u rest\\u route()中指定的任何内容)作为admin/elasticpress/autosuggest/Settings中的端点URL。