WordPress - 如何按字母顺序排序jQuery自动完成搜索建议结果,优先考虑第一个字符,然后是第二个等等。

时间:2018-03-30 12:20:03

标签: javascript php wordpress jquery-ui jquery-ui-autocomplete

我使用jQueryUI AutoComplete和WordPress在用户在搜索框中输入时获取自定义分类的条款。

我有许多运动品牌作为自定义分类术语,因此,例如,术语Adidas可以有许多子项。现在当我输入a时,它会显示......

  • Adidas
  • Adidas Shoes
  • Adidas Socks
  • 等...

......导致其他品牌陷入困境。因此,当我输入a时,我希望结果显示如下......

  • Adidas
  • Amphipod
  • Asics
  • 等...

...直到我继续输入ad,然后才会显示带有子标题的Adidas结果,就像第一个例子中一样。这有可能实现吗?是否jQueryUI AutoComplete能够像这样为我排序结果,还是需要在服务器端使用sortusort等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' );

1 个答案:

答案 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' );