WordPress搜索特定分类下的文章

日期: 标签:phpWebWordPress教程
如需帮忙改代码,或者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

业余编程爱好者。

25 条留言

点此留言
  1. 包子 包子

    路过支持.收藏一下备用

  2. sky sky

    好功能,值得推荐的

  3. fastone fastone

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

    分类1
    …………
    …………

    分类2
    …………
    …………

    • Ludou

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

      • fastone

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

  4. john john

    正需要这个

  5. 侯永禄 侯永禄

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

  6. 阿策 阿策

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

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

    • Ludou

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

  7. SJY 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,否则结果数量不符,该怎么修改呢

    • Ludou

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

  8. 常熟人家

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

  9. 常熟人家

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

  10. mrc

    thx,有用

  11. euku

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

  12. smartant

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

    • 露兜

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

      • smartant

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

      • 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');
        }
        ?>

  13. BanYuner BanYuner

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

  14. 唯历史 唯历史

    有插件吗?

发表留言