腾讯云服务器优惠活动华纳云香港服务器

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

WordPress主题推荐

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

如何实现WordPress搜索结果显示指定的文章分类-第1张-boke112百科(boke112.com)

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

//搜索结果排除所有页面
function search_filter_page($query) {
if ($query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','search_filter_page');

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

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

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

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

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

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

拓展阅读

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

function search_filter_page($query) {
if (!$query->is_admin && $query->is_search) {
$query->set('post_type', 'post');
}
return $query;
}
add_filter('pre_get_posts','search_filter_page');

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

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

3、排除某些分类的文章

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

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

4、只搜索文章标题

function wpse_11826_search_by_title( $search, $wp_query ) {
if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
global $wpdb;
$q = $wp_query->query_vars;
$n = ! emptyempty( $q['exact'] ) ? '' : '%';
$search = array();
foreach ( ( array ) $q['search_terms'] as $term )
$search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
if ( ! is_user_logged_in() )
$search[] = "$wpdb->posts.post_password = ''";
$search = ' AND ' . implode( ' AND ', $search );
}
return $search;
}
add_filter( 'posts_search', 'wpse_11826_search_by_title', 10, 2 );

代码来自知更鸟

本文地址:https://boke112.com/post/4019.html

赞 (0) 打赏
版权声明:本文内容来源于互联网资源,由 boke112百科 整理汇总!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请联系我们,确认后马上更正或删除,谢谢!
香港云主机55元/年
wu