如何为WordPress单个terms页面关闭redirect_canonical重定向
现有代码问题说明
你写的代码逻辑方向是对的,但存在两个可优化的问题:
- 配置参数冗余:
add_filter的第四个参数代表回调函数可接收的参数数量,你的回调函数只用到2个参数,填2即可,填10不会报错但属于冗余配置 - 匹配规则太宽泛:
strpos( $requested_url, 'terms' )会匹配所有URL中包含terms字符串的路径,会误伤其他含terms的页面,不符合你仅针对terms页面关闭重定向的需求
最终可直接使用的实现代码
add_filter( 'redirect_canonical', 'disable_redirect_canonical_for_terms', 10, 2 ); function disable_redirect_canonical_for_terms( $redirect_url, $requested_url ) { // 解析请求URL的路径部分 $request_path = parse_url( $requested_url, PHP_URL_PATH ); // 匹配路径末尾为/terms的情况,兼容多语言站点前缀比如/xx/terms if ( preg_match( '/\/terms$/', trim( $request_path ) ) ) { // 匹配到目标页面时关闭重定向 return false; } // 其他页面保持原有重定向逻辑 return $redirect_url; }
代码说明
- 调整了参数配置,将第四个参数改为2,和回调接收的参数数量对应
- 改用路径正则匹配,仅当请求路径的最后一段是terms时才会关闭重定向,不会误伤其他带terms关键词的页面,同时兼容你站点的多语言路径规则
- 你可以把这段代码放到当前使用主题的
functions.php文件中,或者放到自定义功能插件中即可生效
内容的提问来源于stack exchange,提问作者Tcmxc
相关产品推荐
相关产品推荐

