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

window.location.href/replace拼接URL而非替换?求助排查

问题分析与解决方案

咱们先拆解下你遇到的URL拼接而非跳转的问题,主要是代码里的两个小错误导致的,和WordPress本身关系不大:

核心问题1:URL缺少协议前缀

你定义的url变量是'www.becreativeagencja.com/elplast-wp/',没有加上https://前缀。浏览器会把这种没有协议的字符串当成相对路径,所以执行跳转时,它会把这个路径拼接到当前页面的URL后面,而不是跳转到新的独立地址。

核心问题2:position计算逻辑错误

url.indexOf('/')找的是字符串里第一个/的位置(也就是在www.becreativeagencja.com之后),然后加12的数值是硬编码的,完全不符合你的URL结构。比如你的url字符串总长度是35,计算出来的position也是35,这就导致url.slice(0, position)是整个原URL,再加上语言后缀后,得到的是www.becreativeagencja.com/elplast-wp/en,再结合相对路径的问题,最终就变成了当前URL拼接这个字符串,出现错误的跳转地址。

修复方案

方案1:直接修正前端代码(快速解决)

给URL加上完整的https://协议,并用更可靠的URL API来处理路径,避免硬编码位置:

$("#languages p").click(function() {
  const $language = $(this).text();
  const $lang = $language.toLowerCase();
  // 使用带https协议的完整绝对URL
  const baseUrl = new URL('https://www.becreativeagencja.com/elplast-wp/');
  // 把语言作为子目录添加到路径末尾,比如 https://www.becreativeagencja.com/elplast-wp/en/
  baseUrl.pathname += $lang + '/';
  window.location.replace(baseUrl.href);
});

如果你的多语言结构是语言放在域名和elplast-wp之间(比如https://www.becreativeagencja.com/en/elplast-wp/),可以调整路径处理逻辑:

$("#languages p").click(function() {
  const $language = $(this).text();
  const $lang = $language.toLowerCase();
  const baseUrl = new URL('https://www.becreativeagencja.com/elplast-wp/');
  // 拆分路径并插入语言
  const pathParts = baseUrl.pathname.split('/');
  // 在第二个位置插入语言
  pathParts.splice(1, 0, $lang);
  baseUrl.pathname = pathParts.join('/');
  window.location.replace(baseUrl.href);
});

方案2:结合WordPress特性(更灵活推荐)

硬编码URL很不灵活,万一站点迁移或URL变更,代码就失效了。可以用WordPress的wp_localize_script函数把站点URL传递到前端:

  1. 在你的主题functions.php文件中添加以下代码:
function enqueue_custom_lang_script() {
  // 加载你的自定义JS文件(替换成你实际的JS文件路径)
  wp_enqueue_script('custom-lang-script', get_template_directory_uri() . '/js/lang-switcher.js', array('jquery'), '1.0', true);
  // 传递站点URL到前端全局变量
  wp_localize_script('custom-lang-script', 'siteInfo', array(
    'siteUrl' => get_site_url()
  ));
}
add_action('wp_enqueue_scripts', 'enqueue_custom_lang_script');
  1. 然后在前端JS中使用这个全局变量:
$("#languages p").click(function() {
  const $language = $(this).text();
  const $lang = $language.toLowerCase();
  // 使用WordPress传递的站点URL
  const baseUrl = new URL(siteInfo.siteUrl + '/elplast-wp/');
  baseUrl.pathname += $lang + '/';
  window.location.replace(baseUrl.href);
});

这样不管你的站点URL怎么变化,代码都能正常工作,也更符合WordPress的开发规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:45