WordPress搜索特定分类下的文章

日期: 标签:phpWebWordPress教程 25 条留言
如需帮忙改代码,或者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
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

25 条留言

点此留言
  1. 包子

    路过支持.收藏一下备用

  2. sky

    好功能,值得推荐的

  3. fastone

    请问博主一个问题啊,怎么能让搜索结果按分类排列,就像一些存档页面一样。

    分类1
    …………
    …………

    分类2
    …………
    …………

  4. Ludou

    @fastone WordPress默认不支持此项功能。

  5. fastone

    @Ludou 肯定实现不了吗?有其他方法吗?

  6. john

    正需要这个

  7. 侯永禄

    学习了,每次遇见问题,露兜总能提供解决方法或思想。

  8. 阿策

    感谢路兜的帮助!
    今天我继续修改我的代码

    请问如何实现搜索结果完全精确匹配呢?通过百度我已经将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}'))";由全文搜索变成了标题内搜索,但精确度还没有达到我想要的效果,请我您如何实现搜索结果的完全匹配?即使相差一个字符也返回无搜索结果?

  9. Ludou

    @阿策 没研究过。目前没发现能够实现:相差一个字符也返回无搜索结果

  10. SJY

    按这个方法确实实现了按分类搜索,但却引出了另一个问题,搜索结果的数量显示的仍然是全站的搜索结果数,而不是该分类下的搜索结果数。
    显示搜索结果数的代码如下
    <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,否则结果数量不符,该怎么修改呢

  11. Ludou

    @SJY 不需要那么复杂,代码:
    <?php
    global $wp_query;
    echo $wp_query->found_posts;
    ?>

  12. 常熟人家

    那如果去除某几个分类,或者只搜索几个分类

  13. 常熟人家

    是不是这样写<input type="hidden" name="cat" value="4,11,9,22,20,10" />

  14. Ludou

    @常熟人家 也可以

  15. 常熟人家

    @Ludou 那去除几个分类,该怎么写啊,就指教

  16. Ludou

    @常熟人家 id前加负号

  17. mrc

    thx,有用

  18. euku

    您好 博主 想咨询下既属于A分类又属于B分类这样的搜索怎么实现呢

  19. 露兜

    @euku 改成勾选框就可以了

  20. smartant

    请问下露兜:如果搜索不同分类要引用不搜索结果页面的样式怎么呢?(要这么做的原因是不同类型的文章用了不同类型的自定义字段,所以样式上不一样)

  21. 露兜

    @smartant 搜索引擎搜索:wordpress 不同分类 不同文章模板
    跟这个实质是一样的,只是判断是根据不同的 $_GET['cat']调用不同的search.php模板

  22. smartant

    @露兜 非常感谢您的回答。
    不过我是小白,不知道能不能有代码呢。。。。
    很抱歉提出这样的要求,因为自己实在不会编码。

  23. smartant

    @露兜 嗨,露兜。
    我的不同分类不同模板是这样写的(存档文件里)。
    如果要让搜索结果不同分类不同模板的话,应该怎么改呢!非常感谢!
    <?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');
    }
    ?>

  24. BanYuner

    使用过程中出现一个问题 不知道博主能否解答
    首先我使用的是第二种 也就是多分类的情况
    那么就会出现一个默认搜索分类 一般情况下默认搜索分类自然是全站了,那么我就做了一个傻办法 直接将<option value="11" selected="selected">中的value内填入了站点所有分类 例如<option value="11,12,13" selected="selected"> 那么就出现了一种情况
    搜索之后没有问题 但是点击第二页之后 就会出现无内容的情况 地址栏中就出现了分类11,12,13这些 不知道我说的详细么

  25. 唯历史

    有插件吗?

发表留言