WordPress搜索特定分类下的文章
日期:
标签:php,Web,WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务: 点此联系我
很多时候我们往往只想搜索特定分类下的文章,但是大多数WordPress主题提供的搜索功能只支持搜索全部分类下的文章。那怎么办呢?修改一下主题模板中搜索框代码就可以了,代码如下:
<form action="<?php bloginfo('home'); ?>" method="get">
<div>
<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" />
<input type="hidden" name="cat" value="22" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>
搜索特定分类的方法是,给搜索表单附带一个name="cat"的input元素即可,input域的值即为分类的id号;如果不给搜索表单提供分类id,则默认搜索全部分类下的文章。以上代码第四行中value="22",22即分类的id号,这样该搜索框只搜索分类id 22 下的文章。
如果你想让用户自行选择他想要搜索的分类,可以用下拉列表形式,将第四行代码改成如下代码即可:
<select name="cat" class="search-option">
<option value="11" selected="selected">搜音乐</option>
<option value="22">搜图片</option>
</select>
基于以上思想,其他搜索方式,就有待大家去挖掘了。
分类id的获取方式:进入WordPress管理后台,依次进入 文章 -> 分类目录,各个分类标题的链接类似,http://www.example.com/wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=888&post_type=post,这其中tag_ID=888,888就是该分类的id
参考文章:
Search Specific Category in WordPress
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/search-specific-category-in-wordpress.html
路过支持.收藏一下备用
好功能,值得推荐的
请问博主一个问题啊,怎么能让搜索结果按分类排列,就像一些存档页面一样。
分类1
…………
…………
分类2
…………
…………
@fastone WordPress默认不支持此项功能。
@Ludou 肯定实现不了吗?有其他方法吗?
正需要这个
学习了,每次遇见问题,露兜总能提供解决方法或思想。
感谢路兜的帮助!
今天我继续修改我的代码
请问如何实现搜索结果完全精确匹配呢?通过百度我已经将wp-includes/query.php,
里面的$search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";
替换成了
$search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}'))";由全文搜索变成了标题内搜索,但精确度还没有达到我想要的效果,请我您如何实现搜索结果的完全匹配?即使相差一个字符也返回无搜索结果?
@阿策 没研究过。目前没发现能够实现:相差一个字符也返回无搜索结果
按这个方法确实实现了按分类搜索,但却引出了另一个问题,搜索结果的数量显示的仍然是全站的搜索结果数,而不是该分类下的搜索结果数。
显示搜索结果数的代码如下
<h1>搜索 <?php
$allsearch = &new WP_Query("s=$s&showposts=-1");
$key = wp_specialchars($s, 1);
$count = $allsearch->post_count;
_e('');
_e('<strong>');
echo $key;
_e('</strong>');
_e(' 的结果共 ');
echo $count . ' ';
_e('条');
wp_reset_query(); ?>
</h1>
除非在WP_Query指定分类ID&cat=6,否则结果数量不符,该怎么修改呢
@SJY 不需要那么复杂,代码:
<?php
global $wp_query;
echo $wp_query->found_posts;
?>
那如果去除某几个分类,或者只搜索几个分类
是不是这样写<input type="hidden" name="cat" value="4,11,9,22,20,10" />
@常熟人家 也可以
@Ludou 那去除几个分类,该怎么写啊,就指教
@常熟人家 id前加负号
thx,有用
您好 博主 想咨询下既属于A分类又属于B分类这样的搜索怎么实现呢
@euku 改成勾选框就可以了
请问下露兜:如果搜索不同分类要引用不搜索结果页面的样式怎么呢?(要这么做的原因是不同类型的文章用了不同类型的自定义字段,所以样式上不一样)
@smartant 搜索引擎搜索:wordpress 不同分类 不同文章模板
跟这个实质是一样的,只是判断是根据不同的 $_GET['cat']调用不同的search.php模板
@露兜 非常感谢您的回答。
不过我是小白,不知道能不能有代码呢。。。。
很抱歉提出这样的要求,因为自己实在不会编码。
@露兜 嗨,露兜。
我的不同分类不同模板是这样写的(存档文件里)。
如果要让搜索结果不同分类不同模板的话,应该怎么改呢!非常感谢!
<?php
if ( is_post_type_archive( array( 'best') )){
include(TEMPLATEPATH . '/page-best.php');
} elseif ( is_category( array('book','idea') )){
include(TEMPLATEPATH . '/page-normal.php');
} else {
include(TEMPLATEPATH . '/page.php');
}
?>
使用过程中出现一个问题 不知道博主能否解答
首先我使用的是第二种 也就是多分类的情况
那么就会出现一个默认搜索分类 一般情况下默认搜索分类自然是全站了,那么我就做了一个傻办法 直接将<option value="11" selected="selected">中的value内填入了站点所有分类 例如<option value="11,12,13" selected="selected"> 那么就出现了一种情况
搜索之后没有问题 但是点击第二页之后 就会出现无内容的情况 地址栏中就出现了分类11,12,13这些 不知道我说的详细么
有插件吗?