WordPress中如何通过不同URL路径在同一页面展示多语言内容
实现方案
第一步:配置WordPress重写规则
默认WordPress会将example.com/terms/en这类路径识别为独立页面,不存在就返回404,需要先添加重写规则,把带语言后缀的页面请求转发到原页面处理,将以下代码添加到当前主题的functions.php文件中:
add_action('init', function() { // 规则中的terms替换为你实际的页面别名,有多页面需求可重复添加对应规则 add_rewrite_rule( '^terms/([a-z]{2})/?$', 'index.php?pagename=terms', 'top' ); }); // 禁用路径自动跳转,避免带语言后缀的路径被强制重定向到原terms页面 add_filter('redirect_canonical', function($redirect_url) { if (preg_match('/^terms\/[a-z]{2}\/?$/', $_SERVER['REQUEST_URI'])) { return false; } return $redirect_url; });
修改完成后进入WordPress后台设置-固定链接,点击「保存更改」刷新重写规则即可生效。
第二步:修改前端JS逻辑
将原来从查询参数读取语言编码的逻辑,替换为从URL路径最后一段读取,代码如下:
<script type="text/javascript" charset="UTF-8"> // 拆分URL路径,过滤空片段后取最后一段 const pathSegments = window.location.pathname.split('/').filter(segment => segment !== ''); // 可根据你实际支持的语言调整列表,未匹配到时默认使用en const allowLangs = ['en', 'es', 'fr', 'gb']; const langCode = allowLangs.includes(pathSegments.at(-1)) ? pathSegments.at(-1) : 'en'; Api.Initialized.then(function() { Api.LoadContent(["https://url-to-api-that-has-content.json"], langCode); }); </script>
以上逻辑对多层路径同样生效,比如example.com/xxx/terms/en也可以正常取到最后一段的语言编码。
内容的提问来源于stack exchange,提问作者Tcmxc
相关产品推荐
相关产品推荐

