You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:05:24