私は Twitter の typeahead.js を使用して名前のリストを検索していますが、クライアントは名前に基づいて提案を求めています。
文字列内のどこかではなく、各結果の先頭で Twitter typeahead.js を検索クエリに一致させるオプションはありますか?
beginsWithQuery
関数内の変数を確認できますが、_updateHint
これをオプションとして指定する方法がわかりません。また、これが達成しようとしていることに関連している場合でもわかりません。
私のプロジェクトで typeahead を呼び出している jQuery 関数は次のとおりです。
$( 'input[name="s"]' )
.typeahead( {
name: 'search',
remote: wp_typeahead.ajaxurl + '?action=ajax_search&fn=get_ajax_search&terms=%QUERY',
template: [
'<p><a href="{{url}}">{{value}}</a></p>',
].join(''),
engine: Hogan
} )
);
ajax_search
からの応答が次の形式であることがわかります
[
{ "tokens" : [ "First","Last" ],
"url" : "http://url/for/first-last/",
"value" : "First Last" },
]
token[0]
そのため、この JSON をフィルター処理して、検索クエリに一致するデータのみを含める方法を理解する必要があります。
prefetch
編集:以下の @jharding の anwser に従って、ソリューションを実装するために追加しなければならなかったことに関する追加のメモ。
これは WordPress サイトで、サイトが検索する名前は「モデル」のカスタム投稿タイプのタイトルです。必要なデータ形式でモデル名の配列を出力する list-all-models.php というファイルを作成しました。
<?php
define('WP_USE_THEMES', false);
require('../../../../wp-load.php'); // depends on where this file is
$args = array (
'post_type' => 'model',
'orderby' => 'title',
'order' => 'asc',
'posts_per_page' => -1
);
$models = get_posts($args);
$model_names = array();
foreach ($models as $i => $model) {
$model_names[$i]['value'] = $model->post_title;
$model_names[$i]['url'] = $model->guid;
$model_names[$i]['tokens'] = explode(' ', $model->post_title);
}
header("Content-type: application/json");
die(json_encode($model_names));
?>
次に、このファイルの URL をprefetch
オプションの url パラメーターとして使用しました。
これで、検索は意図したとおりに機能します:)