代码之家  ›  专栏  ›  技术社区  ›  Joe

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

  •  0
  • Joe  · 技术社区  · 7 年前

    我正在使用jQueryUI AutoComplete和WordPress来获取用户在搜索框中键入的自定义分类法的术语。

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

    • 阿迪达斯
    • Adidas Shoes
    • Adidas Socks

    。。。让其他品牌蒙在鼓里。所以,当我打字的时候 ,我希望结果显示如下。。。

    • 阿迪达斯
    • Amphipod
    • Asics

    。。。直到我继续键入 ad ,只有这样 阿迪达斯 显示带有子项的结果,如第一个示例所示。这是否可能实现?jQueryUI AutoComplete是否能够像这样为我排序结果,或者我是否需要在服务器端使用PHP函数对结果进行排序,如 sort ,则, usort 等到目前为止,我尝试编写了一些不同的PHP排序函数,但都没有用,但我现在真的不知道。

    这是我现在掌握的代码:

    自动完成。js公司

    $(function() {
        var url = MyAutocomplete.url + "?action=my_search";
        $('.search-field').autocomplete({
            source: url,                
            delay: 500,
            minLength: 2,
            sortResults: true
        })
    });
    

    功能。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 回复  |  直到 7 年前
        1
  •  0
  •   Blackbam    7 年前

    一切皆有可能,我的朋友,你只需按照自己的意愿编写代码即可。您可以在服务器端和客户端实现您想要的,在这种情况下,我建议使用服务器端。

    如果您不想自动完成显示子类别,请不要交付这些子类别。要么先删除以相同单词开头的名称,要么排除子类别。以下是我为您提供的第一种可能的代码:

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