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

如何防止wp_localize_script为AJAX URL添加语言路径前缀?

解决wp_localize_script传递AJAX URL被GTranslate添加语言前缀的问题

问题分析

PHP端通过admin_url()生成的AJAX URL是正确的,但经过wp_localize_script传递到前端JS后,被GTranslate插件自动添加了语言路径前缀(如zh-CN/),导致AJAX请求指向错误地址。这是因为GTranslate会通过WordPress的过滤钩子,自动重写页面输出中的URL以适配多语言路径规则。

解决方案

方案1:直接构造固定绝对URL(简单直接)

绕过WordPress的动态URL生成,直接传递不带语言前缀的绝对URL字符串,避免被GTranslate的钩子修改:

// 直接构造admin-ajax.php的绝对URL
$ajax_url = 'https://www.example.com/blogs/wp-admin/admin-ajax.php';
wp_localize_script($this->plugin_name, 'MyObj', array(
    'ajax_url' => $ajax_url,
));

缺点:站点域名或路径变更时需要手动修改,灵活性差,适合固定路径的站点。

方案2:临时禁用GTranslate的URL过滤钩子

找到GTranslate用于修改URL的钩子函数,在生成并传递AJAX URL时临时移除,完成后恢复:

// 临时移除GTranslate的URL过滤钩子(函数名需根据GTranslate源码调整)
remove_filter('home_url', 'gtranslate_modify_home_url');
remove_filter('site_url', 'gtranslate_modify_site_url');

// 生成并传递正确的AJAX URL
$ajax_url = admin_url('admin-ajax.php');
wp_localize_script($this->plugin_name, 'MyObj', array(
    'ajax_url' => $ajax_url,
));

// 恢复GTranslate的过滤钩子
add_filter('home_url', 'gtranslate_modify_home_url');
add_filter('site_url', 'gtranslate_modify_site_url');

说明:需要查看GTranslate插件源码,找到实际用于修改URL的钩子函数名(示例中的gtranslate_modify_home_url为占位符)。

方案3:前端JS手动修正URL

如果PHP端修改困难,可在JS拿到URL后手动剔除语言前缀:

// 针对中文前缀的精准替换
const correctAjaxUrl = MyObj.ajax_url.replace(/\/zh-CN\/blogs/, '/blogs');

// 通用匹配任意两位语言代码+区域的前缀(如en-US、fr-FR等)
// const correctAjaxUrl = MyObj.ajax_url.replace(/\/[a-z]{2}-[A-Z]{2}\/blogs/, '/blogs');

// 使用修正后的URL发起AJAX请求
fetch(correctAjaxUrl, {
  method: 'POST',
  // 其他请求配置
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:03