如何防止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
相关产品推荐
相关产品推荐

