我有一个搜索字段。搜索没有问题,如果我在上面输入任何内容并单击按钮,它就会重定向到我可以获得搜索结果的页面。
我要做的是,当用户在搜索字段中输入任何文本时,我必须显示类别下拉自动搜索列表。我找到一个插件(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;
}
最合适的回答,由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()
.