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

WordPress多语言主题:如何通过Rewrite规则适配页面与文章等内容类型

解决方案

要实现带语言前缀的URL(如https://example.com/en/blog)能匹配对应页面、文章及自定义内容类型,需调整重写规则并配合查询调整,具体步骤如下:

1. 注册语言查询变量

首先确保WordPress能识别language参数,避免被过滤掉:

add_filter('query_vars', function($vars) {
    $vars[] = 'language';
    return $vars;
});

2. 添加重写规则

定义支持的语言代码,编写匹配语言前缀的重写规则,同时覆盖首页和带内容路径的场景:

// 替换为你实际支持的语言代码
$supported_languages = ['en', 'zh-CN', 'fr'];
$language_regex = implode('|', array_map('preg_quote', $supported_languages));

// 匹配带内容路径的URL(如/en/blog)
add_rewrite_rule(
    "^($language_regex)/(.*)$",
    'index.php?name=$matches[2]&language=$matches[1]',
    'top'
);

// 匹配语言前缀首页(如/en/)
add_rewrite_rule(
    "^($language_regex)/?$",
    'index.php?language=$matches[1]',
    'top'
);

3. 调整主查询匹配所有内容类型

默认情况下,name参数只会匹配文章(post类型),需通过pre_get_posts动作让查询同时匹配页面、自定义内容类型:

add_action('pre_get_posts', function($query) {
    // 仅处理前台主查询,且存在language参数时生效
    if (!is_admin() && $query->is_main_query() && get_query_var('language')) {
        // 设置查询匹配所有内容类型
        $query->set('post_type', 'any');
        // 这里可保留你已实现的语言本地化逻辑
    }
});

4. 刷新重写规则

完成代码添加后,进入WordPress后台的设置 → 固定链接页面,直接点击「保存更改」(无需修改任何设置),触发重写规则刷新,确保新规则生效。

原理说明

  • 重写规则捕获语言前缀和后续路径,将路径部分通过name参数传递给WordPress查询
  • pre_get_posts中设置post_type=any,让WordPress自动匹配文章、页面或自定义内容类型的slug
  • 保留language参数供你已实现的本地化逻辑使用

内容的提问来源于stack exchange,提问作者Hossein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:22:47