我使用jQueryUI AutoComplete和WordPress在用户在搜索框中输入时获取自定义分类的条款。
我有许多运动品牌作为自定义分类术语,因此,例如,术语Adidas
可以有许多子项。现在当我输入a
时,它会显示......
Adidas
Adidas Shoes
Adidas Socks
......导致其他品牌陷入困境。因此,当我输入a
时,我希望结果显示如下......
Adidas
Amphipod
Asics
...直到我继续输入ad
,然后才会显示带有子标题的Adidas
结果,就像第一个例子中一样。这有可能实现吗?是否jQueryUI AutoComplete能够像这样为我排序结果,还是需要在服务器端使用sort
,usort
等PHP函数对它们进行排序?我到目前为止尝试编写一些不同的PHP排序函数无济于事,但我现在还不知道。
这是我现在的代码:
autocomplete.js
$(function() {
var url = MyAutocomplete.url + "?action=my_search";
$('.search-field').autocomplete({
source: url,
delay: 500,
minLength: 2,
sortResults: true
})
});
functions.php(WordPress)
function my_search()
{
$args = array(
'search' => strtolower($_GET['term']),
'taxonomy' => array('suggestion_string'),
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'number' => 10,
);
$search_query = new WP_Term_Query($args);
$results = array( );
if ( $search_query->get_terms() ) {
foreach($search_query->get_terms() as $term) {
$results[] = array(
'label' => $term->name,
);
}
}
else {
}
// Tried to write a few different sort functions here to no avail, like:
sort($results);
$data = json_encode($results);
echo html_entity_decode( $data );
exit();
}
add_action( 'wp_ajax_my_search', 'my_search' );
add_action( 'wp_ajax_nopriv_my_search', 'my_search' );
答案 0 :(得分:0)
一切皆有可能我的朋友你只需按照自己的意愿编码。您可以在服务器端以及客户端实现您想要的功能,在这种情况下,我会推荐服务器端。
如果您不想要自动填充显示子类别,则不要提供这些。要么首先删除以相同单词开头的名称,要么排除子类别。这是第一种可能性的代码:
function my_search()
{
$args = array(
'search' => strtolower($_GET['term']),
'taxonomy' => array('suggestion_string'),
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'number' => 10,
);
$search_query = new WP_Term_Query($args);
$results = array( );
if ( $search_query->get_terms() ) {
foreach($search_query->get_terms() as $term) {
$results[] = array(
'label' => $term->name,
);
}
}
else {
}
$filtered = [];
$existing = [];
if(strlen($_GET['term'])<2) {
foreach($results as $term) {
$first_word = explode(" ",$term["label"])[0];
if(!in_array($first_word,$existing) {
array_push($existing,$first_word);
$filtered[] = $term;
}
}
} else {
$filtered = $results;
}
$data = json_encode($results);
echo html_entity_decode( $data );
exit();
}
add_action( 'wp_ajax_my_search', 'my_search' );
add_action( 'wp_ajax_nopriv_my_search', 'my_search' );