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

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

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

  1. //搜索结果排除所有页面
  2. functionsearch_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');

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

  1. //搜索结果只能是文章和页面类型,不含自定义类型
  2. functionsearch_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. functionsearch_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');

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

拓展阅读

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

  1. functionsearch_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. functionBing_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. functionBing_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');

4、只搜索文章标题

  1. functionwpse_11826_search_by_title($search,$wp_query){
  2. if(!empty($search)&&!empty($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_titleLIKE%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);
溫馨提示:

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

文章連結:https://www.wuyanshuo.cn/1300.html

更新時間:2022年9月12日

1、本站所有資源均不添加推廣檔案或浮水印,壓縮包內若有廣告檔案和浮水印請勿輕易相信。

2、本站資源均為兩層壓縮,第一層7z(尾碼若為wys,請自行修改為7z)有解壓密碼; 第二層zip或cbz,無解壓密碼,可直接使用漫畫類軟件程式查看; 詳情可參攷解壓教程

3、本站大部分內容均收集於網絡! 若內容侵犯到您的權益,請發送郵件至:admin#wysacg.top我們將第一時間處理! 資源所需價格並非資源售賣價格,是收集、整理、編輯詳情以及本站運營的適當補貼,並且本站不提供任何免費技術支援。 所有資源僅限於參攷和學習,版權歸原作者所有!

给TA打赏
共{{data.count}}人
人已打赏
建站教程

WordPress 调用自定义分类法的文章的方法

2022-9-11 17:02:09

建站教程

WordPress 如何在前端添加一个wp_editor编辑器带图片上传却不弹出媒体库

2022-9-12 13:59:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索