wordpress默认搜索,会搜索整个网站的内容,于是就有各种问题,比如需要仅搜索自定义type为”product”的话,该如何处理,如果在此基础上,还可以要求在某个product 分类下搜索,又该如何处理。
百度,google翻看了很多,最后发现当访问的链接为
1 |
http://www.yusunny.com/?s=测试&post_type=products&product-category=product-category02 |
该搜索即可生效。
以下为自定义搜索,当不需要进行分类判断时,删除name=”product-category”一行即可,也不需要js。
原理:search会传入 type=”hidden” 的 name=”post_type” 的name值到url中(如果听不懂,试试就知道了)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<section class="product-search-wrapper"> <div class="container"> <form method="get" class="searchbox clearfix" id="product-search" action="<?php echo get_site_url(); ?>/"> <label for="s">产品搜索<br />PRODUCT SEARCH</label> <input type="text" class="searchtext field" name="s" id="s" placeholder="请输入关键词" /> <select id="product-cats-select"> <option value="">--请选择产品分类--</option> <?php $args = array( 'parent' => 0, 'hide_empty' => 0, 'hierarchical' => 1, 'taxonomy' => 'product-category' //注册的分类名 ); $categories_list = get_categories($args); foreach ( $categories_list as $category_list ) { ?> <option value="<?php echo $category_list->slug;?>"><?php echo $category_list->name;?></option> <?php }?> </select> <input type="hidden" name="post_type" value="products" /> <input type="hidden" name="product-category" value="" disabled="disabled" /> <button type="submit" id="searchsubmit"><i class="fa fa-search"></i>搜索</button> </form> </div> </section> |
“product-category”为非必填,默认加上了‘disabled=”disabled”’属性,以下jQuery用来判断为空时不进行分类判断。
1 2 3 4 5 6 7 |
jQuery("#product-cats-select").on('change', function(){ if(jQuery.isEmptyObject(jQuery("#product-cats-select").val()) == true || jQuery("#product-cats-select").val() == ''){ jQuery("#product-search input[name='product-category']").attr("disabled","disabled").val(''); } else { jQuery("#product-search input[name='product-category']").attr("disabled",false).val(jQuery("#product-cats-select").val()); } }) |
那么如何只搜索post的文章?
按照上面的方法,设置
1 |
<input name="post_type" type="hidden" value="post" /> |
这个方法是可行的,适用于一个网站有多个不同的搜索;不过如果该网站只需要一个搜索,用下面这段代码也可以实现。
1 2 3 4 5 6 7 8 |
//搜索结果排除所有页面 function search_filter_page($query) { if ($query->is_search) { $query->set('post_type', 'post'); } return $query; } add_filter('pre_get_posts','search_filter_page'); |