WordPress中/?post_types=boardgames路径应匹配哪个模板文件?
问题解决方案
首先明确两个核心原因:
- Apache默认
Redirect指令仅匹配路径部分,不识别?后的查询字符串,因此你写的301规则不生效 - WordPress会将携带
post_types查询参数的请求判定为搜索请求,不会主动加载自定义文章类型的归档模板
你可以任选以下一种方案解决:
方案1:修复301跳转规则,将带参数请求统一跳转至漂亮固定链接
在.htaccess文件的WordPress默认规则之前添加以下mod_rewrite规则:
<IfModule mod_rewrite.c> RewriteEngine On # 匹配查询字符串为post_types=boardgames的根路径请求 RewriteCond %{QUERY_STRING} ^post_types=boardgames$ RewriteRule ^$ /boardgames/? [L,R=301] </IfModule>
规则末尾的?作用是跳转时丢弃原查询参数,避免出现无限跳转问题。
方案2:不跳转,直接让带参数请求加载正确模板
在主题的functions.php文件中添加如下钩子代码:
add_filter( 'template_include', 'custom_boardgames_template_redirect' ); function custom_boardgames_template_redirect( $template ) { // 匹配post_types=boardgames的搜索请求 if ( get_query_var( 'post_types' ) === 'boardgames' && is_search() ) { $custom_template = locate_template( 'archive-boardgames.php' ); if ( !empty( $custom_template ) ) { return $custom_template; } } return $template; }
方案3:从根源修改Search & Filter插件的输出
直接进入插件对应筛选器的设置界面,找到「全部」选项的自定义URL配置项,手动填写/boardgames/作为全部选项的跳转地址,替换插件默认生成的带参数链接。
注意:修改完规则或代码后如果开启了服务器缓存、CDN或者WordPress缓存插件,需要先清空缓存再测试;301重定向是永久缓存,测试前需要清空浏览器缓存。
内容的提问来源于stack exchange,提问作者Ger
相关产品推荐
相关产品推荐

