如何实现WordPress搜索结果显示指定的文章分类

 2017-06-30 07:37:41  160 人阅读  26 条评论

投放广告联系   诚邀合作伙伴   赞助我们   公告栏   赞助光荣榜

不知道大家是否留意到 boke112导航的搜索功能,搜索某些文章/页面的时候,总是会出现很多博客目录页,而这些目录页对于搜索结果而言是无意义的,所以非常有必要把这个博客目录页从搜索结果中剔除出来。今天,boke112 就跟大家说一说如何实现 WordPress 搜索结果显示指定文章分类,比如 boke112导航中的搜索结果只显示文章类型和页面类型,而不显示博客目录页的自定义文章类型。

如何实现WordPress搜索结果显示指定的文章分类 WordPress 第1张

网络上分享的做法及代码几乎都是一样的,大多数都是在 WordPress 搜索结果中排除所有页面,具体做法就是将下面的代码添加到主题的 functions.php 文件:

  1. //搜索结果排除所有页面
  2. function search_filter_page($query) {
  3.     if ($query->is_search) {
  4.         $query->set('post_type', 'post');
  5.     }
  6.     return $query;
  7. }
  8. add_filter('pre_get_posts','search_filter_page');

结合 boke112导航的实际情况(只显示文章和页面类型,不显示自定义文章类型),修改后的代码如下:

  1. //搜索结果只能是文章和页面类型,不含自定义类型
  2. function search_filter_page($query) {
  3.     if ($query->is_search) {
  4.         $query->set('post_type', array('post','page'));
  5.     }
  6.     return $query;
  7. }
  8. add_filter('pre_get_posts','search_filter_page');

添加以上代码之后,在前台搜索时果然只能显示文章和页面类型了,自定义文章类型已经不会显示了。但是在后台的文章、页面等进行搜索时,发现经常出错,比如在后台的所有页面或所有文章中搜索,总是会同时出现文章和页面,或者直接来个“无效的文章类型”等。

如果直接将以上代码添加到主题的 search.php 文件就一切正常,后来几经折腾后才发现以上代码的判断语句中漏了一个比较重要的条件,完整版代码应该是:

  1. //搜索结果只能是文章和页面类型,不含自定义类型
  2. function search_filter_page($query) {
  3.     if (!$query->is_admin && $query->is_search) {
  4.         $query->set('post_type', array('post','page'));
  5.     }
  6.     return $query;
  7. }
  8. add_filter('pre_get_posts','search_filter_page');

至此,boke112导航的搜索功能已经实现了只显示文章和页面类型,而不会显示博客目录页的自定义文章类型了。

拓展阅读

1、搜索结果排除所有页面的正确代码

  1. function search_filter_page($query) {
  2.     if (!$query->is_admin && $query->is_search) {
  3.         $query->set('post_type', 'post');
  4.     }
  5.     return $query;
  6. }
  7. add_filter('pre_get_posts','search_filter_page');

2、搜索结果排除特定 ID 的文章或页面

  1. function Bing_search_filter_id($query) {
  2.     if ( !$query->is_admin && $query->is_search) {
  3.         $query->set('post__not_in', array(40,819));//文章或者页面的ID
  4.     }
  5.     return $query;
  6. }
  7. add_filter('pre_get_posts','Bing_search_filter_id');

3、排除某些分类的文章

  1. function Bing_search_filter_category( $query) {
  2.     if ( !$query->is_admin && $query->is_search) {
  3.         $query->set('cat','-15,-57'); //分类的ID,前面加负号表示排除;如果直接写ID,则表示只在该ID中搜索
  4.     }
  5.     return $query;
  6. }
  7. add_filter('pre_get_posts','Bing_search_filter_category');

1(修改)、2、3代码来自斌果

4、只搜索文章标题

  1. function wpse_11826_search_by_title( $search$wp_query ) {
  2.     if ( ! emptyempty$search ) && ! emptyempty$wp_query->query_vars['search_terms'] ) ) {
  3.         global $wpdb;
  4.         $q = $wp_query->query_vars;
  5.         $n = ! emptyempty$q['exact'] ) ? '' : '%';
  6.         $search = array();
  7.         foreach ( ( array ) $q['search_terms'] as $term )
  8.             $search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s"$n . $wpdb->esc_like( $term ) . $n );
  9.         if ( ! is_user_logged_in() )
  10.             $search[] = "$wpdb->posts.post_password = ''";
  11.         $search = ' AND ' . implode( ' AND ', $search );
  12.     }
  13.     return $search;
  14. }
  15. add_filter( 'posts_search', 'wpse_11826_search_by_title', 10, 2 );

代码来自知更鸟

如果文章对你有帮助,请赞赏支持boke112导航发展!

本文地址:http://boke112.com/4019.html
文章标签: ,   ,  
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:aiboke112
版权声明:本文为原创文章,版权归  所有,欢迎分享本文,转载请保留出处!
WordPress/zblogPHP免费响应式博客主题Blogs

 发表评论


  1. 心动
    心动 【举人】 @回复

    学习到了,感谢!非常实用。

  2. 桓宇博客
    桓宇博客 【书童】 @回复

    挺实用的教程

  3. 明月登楼
    明月登楼 【王爷】 @回复

    不错,这个很实用!

  4. 小萝博客
    小萝博客 【状元】 @回复

    完全自定义了

  5. 爱祛痘
    爱祛痘 【书童】 @回复

    谢谢分享!

  6. 书生意气
    书生意气 【举人】 @回复

    看到代码了,高大上的项目往往我都是路过 [给力]

  7. YangOne
    YangOne 【进士】 @回复

    能很好的规整博客搜索引擎。不错的

  8. 寒辞
    寒辞 【书童】 @回复

    [赞] 不错啊,学习了

  9. 励志语录
    励志语录 【进士】 @回复

    很不错,学习了

  10. 橘子书
    橘子书 【丞相】 @回复

    这个挺好用的。 [赞]

  11. BanYuner
    BanYuner 【进士】 @回复

    可以的,这个算是一个小技巧了吧

  12. 闲鱼
    闲鱼 【进士】 @回复

    按需选择,哈哈

  13. WP头条
    WP头条 【秀才】 @回复

    这个不错

  14. 靠谱学生兼职网
    靠谱学生兼职网 【尚书】 @回复

    真是只有想不到,没有做不到。

  15. 管家婆
    管家婆 【进士】 @回复

    WordPress功能之强大 [赞]

  16. 码农BTS
    码农BTS 【状元】 @回复

    昨天莫名被serverhold了,刚刚提交工单刚恢复

  17. 网赚乎
    网赚乎 【举人】 @回复

    感谢分享。

  18. 爱时尚
    爱时尚 【尚书】 @回复

    wodpress已经玩的很6了 [赞]

  19. 爱祛痘
    爱祛痘 【书童】 @回复

    谢谢分享

  20. 龙笑天
    龙笑天 【状元】 @回复

    [赞] 还木有动过搜索…

  21. 七号文库
    七号文库 【秀才】 @回复

    谢谢分享

  22. 拿着灼热的铁
    拿着灼热的铁 【举人】 @回复

    留着以后用。

  23. VideoClub
    VideoClub 【尚书】 @回复

    又学习了一招

  24. 赚客吧
    赚客吧 【小白】 @回复

    谢谢分享 厉害了

  25. Koolight
    Koolight 【尚书】 @回复

    厉害,搜索都被博主玩坏了。

    • boke112导航
      boke112导航【村长】2017-06-30 09:14  回复

      @Koolight[偷笑] 这个只是按需调整而已,不折腾每次看到一大堆的博客目录页出来,很不爽