如何在按键时显示类别下拉自动搜索列表?

时间:2020-08-24 作者:Naren Verma

我有一个搜索字段。搜索没有问题,如果我在上面输入任何内容并单击按钮,它就会重定向到我可以获得搜索结果的页面。

我要做的是,当用户在搜索字段中输入任何文本时,我必须显示类别下拉自动搜索列表。我找到一个插件(https://wordpress.org/plugins/ajax-search-lite/) 这里还有演示(https://lite.ajaxsearchpro.com/). 我正在尝试做同样的事情,但我不能使用插件。

我需要知道我必须在ajax上使用什么查询才能获得输出?

表单代码

function search_form($atts) { 
     $form = \'<section class="universalSearch"><div class="search search-form"><form role="search" method="get" action="\' . home_url( \'/\' ) . \'" >
    <label class="screen-reader-text" for="s">SEARCH</label>
     <input type="search" class="search-field universalSearchField" value="\' . get_search_query() . \'" name="s"  placeholder="Search" id="searchdata" />
     <input type="submit" id="searchsubmit" class="search-submit" value="\'. esc_attr__(\'Go\', \'domain\') .\'" />
     </form></div></section>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
     <script>

             (function($) {  // ready handler
$(".universalSearchField").keypress(function() {
     $.ajax({
        url: "/wp-admin/admin-ajax.php",
        type: "post",
        data: { action: "universalSearchlist", keyword: $("#searchdata").val() },
        success: function(data) {
            $("#autocategories").html(data);
        }
    });
    });

    })(jQuery);
        </script>\';
    
     return $form;
}

add_shortcode( \'get_search_form\', \'search_form\');
AjAX代码

add_action(\'wp_ajax_universalSearchlist\',\'universalSearch\');
add_action(\'wp_ajax_nopriv_universalSearchlist\',\'universalSearch\');
function universalSearch(){
    $data=\'\';
    $args = array(
     \'s\' => $_REQUEST[ \'universalSearchlist\' ],
     \'cat\' => \'category\'
);
    
    $the_query = new WP_Query( $args );
    foreach ($the_query->posts as $post) {
        var_dump($post);
    }
    

    //endif;
    //die();
    return $data;
    
}

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我需要知道我必须在AJAX上使用什么查询才能获得输出?

在评论中,你说:“我不知道你在说什么。”我只想搜索类别;,因此,您可以简单地使用get_categories() (或get_terms() ,并设置search 提交的搜索关键字的参数:

// Get the categories assigned to ANY posts that matched the search keyword.
$terms = get_categories( array(
    \'search\' => sanitize_text_field( $_REQUEST[\'universalSearchlist\'] ),
) );

// Then display the categories or do whatever is necessary. (I used \'echo\' for testing.)
foreach ( $terms as $term ) {
    $cat_link = get_category_link( $term );
    echo \'<a href="\' . esc_url( $cat_link ) . \'">\' . esc_html( $term->name ) . \'</a><br>\';
}

/* Or using get_terms():
$terms = get_terms( array(
    \'search\'   => sanitize_text_field( $_REQUEST[\'universalSearchlist\'] ),
    \'taxonomy\' => \'your_taxonomy\',
) );

if ( ! is_wp_error( $terms ) ) {
    foreach ( $terms as $term ) {
        ... your code.
    }
}
*/
所以没有必要WP_Query 除非您只希望为与搜索关键字匹配的帖子分配类别。

其他注意事项实际上,我建议您使用REST APIsearching the categories — e、 g.您可以向example.com/wp-json/wp/v2/categories?search=<keyword>, 但你可以问另一个问题。

在您的universalSearch() 函数,您应该调用wp_die() 没有必要return 任何事情wp_ajax_ 钩子是动作钩子,不是过滤钩子)。

你真的应该把你的脚本排队(.js) 使用wp_enqueue_script() 您应该只使用WordPress附带的默认jQuery脚本。

您的AJAX JS实际上并没有将搜索关键字发送到服务器,因此除了action 参数,您应该添加universalSearchlist: $( this ).val() 到的第二个参数$.post().

相关推荐

如何按照与菜单相同的顺序对Get_Categories()进行排序?

我使用了一个主题,我注意到它在菜单中动态显示了一系列类别:我需要相同的类别列表,但页脚的HTML标记不同。目前,这是我在页脚中的内容:页脚。php:<?php $categories = get_categories(); foreach($categories as $category) { echo \'<a href=\"\' . get_category_link($category->term_id) . \'\"