WordPress搜索指定post_type为manga不生效问题修复
问题原因
指定post_type为post、page正常,换成manga就失效,基本是两个原因:
manga作为自定义文章类型,注册时没开启搜索支持,exclude_from_search参数被设为true,从底层就被排除在搜索查询范围外,后面怎么改查询参数都没用- 你在模板里用
query_posts修改查询的优先级太低,主题、插件自带的搜索过滤逻辑会在你之后执行,直接把你设的post_type参数覆盖掉
修复步骤
别在模板里堆query_posts逻辑,按下面的步骤改,稳定性高很多:
- 先检查
manga自定义文章类型的注册配置
找到注册manga类型的代码段,确认以下参数配置正确:
// manga自定义文章类型注册参数关键项 $args = array( // 省略其他无关配置 'public' => true, // 前台可访问 'exclude_from_search' => false, // 允许出现在搜索结果中 // 省略其他无关配置 ); register_post_type( 'manga', $args );
如果这两个参数不对,先改对再往下走。
- 删除模板最开头你加的这段冗余查询代码
// 删掉下面这三行,不要留 global $wp_query; $args = array_merge( $wp_query->query, array( 'post_type' => 'manga' ) ); query_posts( $args );
这种写法不仅多做一次数据库查询拖性能,还很容易被其他逻辑覆盖,WordPress官方早就不推荐在模板里这么改主查询。
- 把下面的代码加到主题目录下的
functions.php文件里,用官方推荐的钩子改搜索查询
add_action( 'pre_get_posts', function( $query ) { // 只在前台、主查询、搜索页面生效,不影响后台和其他页面 if ( !is_admin() && $query->is_main_query() && $query->is_search() ) { $query->set( 'post_type', [ 'manga' ] ); } });
如果你需要同时返回文章、页面、漫画三类结果,把post_type的参数改成[ 'post', 'page', 'manga' ]就行。
收尾验证
改完之后进后台打开「设置」-「固定链接」页面,直接点底部的保存按钮(不用改任何配置),刷新WordPress的重写规则;如果开了页面缓存插件,顺手清一下全站缓存,再去前台搜索测试就能正常返回manga类型的内容了。
内容的提问来源于stack exchange,提问作者Rapha Gosh
相关产品推荐
相关产品推荐

