弹性媒体自动建议的REST API终结点

时间:2018-01-25 作者:Nicolai Grossherr

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;
}
不同的部件工作正常。我正在努力从传递的对象获取数据。有什么想法吗?

2 个回复
最合适的回答,由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。

结束

相关推荐

如何从管理仪表板中的插件发送AJAX请求?

对于如何在wordpress插件中使用Ajax有点困惑。您是否必须使用jQuery,因为目前我的代码是普通的javascript?此外,我不确定我是否能够使用内联代码,还是必须将javascript放在单独的文件中才能使用wp\\U enque?<?php /* * Plugin Name: React Test * Description: Simple Reactjs test * Version: 0.0.1 */