WordPress自定义主题多语言配置:页面语言分配与URL设置求助
WordPress自定义主题多语言实现方案
1. URL嵌入语言标识(自定义分类法实现)
用自定义分类法就能搞定URL的语言标识嵌入,步骤很清晰:
- 在主题的
functions.php里注册一个叫language的分类法,重点配置rewrite参数来控制URL结构:
function register_language_taxonomy() { $args = array( 'label' => '语言', 'public' => true, 'hierarchical' => false, 'rewrite' => array( 'slug' => '%language%', 'with_front' => false ), 'show_in_rest' => true ); register_taxonomy('language', 'page', $args); } add_action('init', 'register_language_taxonomy');
- 后台进入设置→固定链接,把自定义结构改成
/%language%/%postname%/,保存一下刷新规则。 - 编辑页面时,在右侧“语言”分类框给页面分配
zh、en这类语言术语,发布后URL就会变成your-site.com/zh/about这种格式。
2. 无插件独立页面模板实现翻译
直接利用WordPress的模板层级规则就行,不用插件也能搞独立翻译:
- 在主题目录下创建语言专属模板,比如:
page-zh.php:所有中文页面通用模板page-en.php:所有英文页面通用模板- 要更细分的话,比如“关于我们”页面可以做
page-about-zh.php、page-about-en.php
- 编辑页面时,在右侧“页面属性”的“模板”下拉框选对应的语言模板就行。
- 要是想自动根据语言分类加载模板,在
functions.php加个钩子:
function load_language_template($template) { global $post; $languages = get_the_terms($post->ID, 'language'); if ($languages && !is_wp_error($languages)) { $lang_slug = $languages[0]->slug; $custom_template = locate_template(array('page-' . $lang_slug . '.php')); if ($custom_template) { return $custom_template; } } return $template; } add_filter('template_include', 'load_language_template');
3. 独立多语言菜单配置
- 后台去外观→菜单,分别建“中文菜单”、“英文菜单”,菜单里直接加对应语言的页面就行(这些页面URL已经带语言标识,选完链接自动正确)。
- 在主题的
header.php里,根据当前页面的语言分类加载对应菜单:
global $post; $lang_slug = ''; $languages = get_the_terms($post->ID, 'language'); if ($languages && !is_wp_error($languages)) { $lang_slug = $languages[0]->slug; } switch ($lang_slug) { case 'zh': wp_nav_menu(array('menu' => '中文菜单', 'container' => 'nav')); break; case 'en': wp_nav_menu(array('menu' => '英文菜单', 'container' => 'nav')); break; default: wp_nav_menu(array('menu' => '默认菜单', 'container' => 'nav')); }
可选插件方案
嫌手动写代码麻烦的话,这两个插件能省不少事:
- Polylang:轻量型多语言插件,支持自定义分类法的语言URL、多语言菜单管理,还能兼容你自己写的自定义页面模板,配置简单。
- WPML:功能更全,适合大型站点,但相对重一点,同样能满足你的所有需求。
内容的提问来源于stack exchange,提问作者lvRoy
相关产品推荐
相关产品推荐

