WordPress:Polylang将自定义固定链接重定向至默认语言求助
解决方案:Polylang自定义文章类型固定链接重定向问题
针对你遇到的自定义文章类型(esg-talks)固定链接被Polylang强制重定向到默认语言的问题,以下是关键解决步骤:
1. 禁用WordPress原生规范URL重定向
仅禁用Polylang的pll_check_canonical_url不足以阻止重定向,因为WordPress本身的redirect_canonical钩子仍会触发规范URL跳转。需针对目标自定义文章类型单独禁用该逻辑:
add_filter('redirect_canonical', 'disable_canonical_for_esg_talks', 10, 2); function disable_canonical_for_esg_talks($redirect_url, $requested_url) { global $post; // 替换为你的自定义文章类型slug if (isset($post) && $post->post_type === 'esg_talks') { return false; } return $redirect_url; }
2. 强制Polylang使用当前语言上下文
由于你的文章无需关联特定语言,需让Polylang返回当前访问的语言作为文章的语言归属,避免它默认跳转到站点默认语言:
add_filter('pll_get_post_language', 'set_esg_talks_current_language', 10, 2); function set_esg_talks_current_language($lang, $post_id) { $post = get_post($post_id); if ($post && $post->post_type === 'esg_talks') { return pll_current_language(); } return $lang; }
3. 用WordPress原生钩子生成自定义固定链接
替换手动拼接URL的方式,使用post_type_link钩子生成符合WP机制的固定链接,确保Polylang不会干扰链接生成:
add_filter('post_type_link', 'custom_esg_talks_permalink', 10, 2); function custom_esg_talks_permalink($link, $post) { if ($post->post_type === 'esg_talks') { $current_lang = pll_current_language(); return home_url("/{$current_lang}/esg-talks/{$post->post_name}/"); } return $link; }
4. 保留原有的Polylang规范检查禁用
继续保留你之前添加的代码,确保Polylang自身的规范URL检查被关闭:
add_filter( 'pll_check_canonical_url', '__return_false' );
关键说明
- 之前
pll_check_canonical_url无效的核心原因:WordPress原生的规范重定向逻辑仍在生效,且Polylang会自动将无语言关联的文章绑定到站点默认语言,触发跳转。 - 操作完成后请清空WordPress缓存、浏览器缓存,避免缓存导致的重定向残留。
内容的提问来源于stack exchange,提问作者Nicolas Troadec
相关产品推荐
相关产品推荐

