web-dev-qa-db-ja.com

REST elasticpress自動提案のAPIエンドポイント

Elasticpressの一部であるAJAXはこのように見えます

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

さまざまな部分が正常に機能します。渡されたオブジェクトからデータを取得するのに苦労しています。何か案は?

4
Nicolai

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

6
Nicolai

プラグインNicolaiをありがとう!私にとってはっきりしないことをいくつか指摘したいと思いました。

プラグインがインストールされたら、elasticpress-autosuggest-endpoint.phpのep_autosuggest()を修正します。

$params = [
    'index' => ep_get_index_name(), // get name of ES index dynamically
    'type' => 'post',
    'body' => $data->get_body()
];

次に、http://yourdomainname.com/wp-json/elasticpress/autosuggest/(またはregister_rest_route()で指定されているもの)をadmin/ElasticPresss/Autosuggest/SettingsのエンドポイントURLとして使用します。

2
Dmitriy