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

上传站点后head标签内get_site_url校验失效、脚本始终执行如何解决?

问题原因分析
  • 最常见的原因是get_site_url()返回值和你写的判断字符串不完全匹配:比如站点后台配置的地址带尾随斜杠、协议实际为http、域名大小写存在差异等,全等判断===会直接不通过或者始终通过(如果你的开发环境也误配了生产域名的话)。
  • 其次可能是站点开启了页面静态缓存/对象缓存,PHP判断逻辑仅在缓存生成时执行一次,后续访问直接返回缓存后的带脚本的页面,导致拦截逻辑失效。
  • 部分多站点配置下,get_site_url()返回的是当前站点的地址而非全局主站地址,也可能导致判断异常。
可落地的解决方案

方案1:使用WordPress官方环境变量判断(最推荐)

WordPress 5.5及以上版本内置了wp_get_environment_type()函数专门用于判断运行环境,无需硬编码域名,可靠性更高:

  1. 先在生产站点的wp-config.php中添加配置:
define( 'WP_ENVIRONMENT_TYPE', 'production' );
  1. 开发环境的wp-config.php对应配置为:
define( 'WP_ENVIRONMENT_TYPE', 'development' );
  1. 把你的head判断逻辑替换为:
<?php if ( wp_get_environment_type() === 'production' ) : ?>
<!-- 生产环境才加载的脚本 -->
<script src="https://global.localizecdn.com/localize.js"></script>
<script>
!function (a) {
    if (!a.Localize) {
        a.Localize = {};
        for (var e = ["translate", "untranslate", "phrase", "initialize", "translatePage", "setLanguage", "getLanguage", "getSourceLanguage", "detectLanguage", "getAvailableLanguages", "untranslatePage", "bootstrap", "prefetch", "on", "off", "hideWidget", "showWidget"], t = 0; t < e.length; t++) a.Localize[e[t]] = function () {}
    }
}(window);
</script>
<script>
Localize.initialize({
    key: '12c7ba123a6af',
    rememberLanguage: true
});
</script>
<?php endif; ?>

方案2:优化域名判断逻辑

如果不想改配置,可以提取域名主体进行判断,规避协议、尾随斜杠的影响:

<?php
$site_host = parse_url( get_site_url(), PHP_URL_HOST );
if ( $site_host === 'www.testwebsite.com' ) :
?>
<!-- 生产脚本内容 -->
<?php endif; ?>

方案3:前端JS判断(适配有静态缓存的场景)

如果站点开启了静态缓存,PHP逻辑无法对每次请求生效,可以改用前端判断,缓存也不会影响逻辑执行:
直接在head中输出以下代码即可,无需PHP判断:

<script>
// 仅生产域名加载翻译脚本
if ( window.location.host === 'www.testwebsite.com' ) {
    const script = document.createElement('script');
    script.src = 'https://global.localizecdn.com/localize.js';
    script.onload = () => {
        Localize.initialize({
            key: '12c7ba123a6af',
            rememberLanguage: true
        });
    };
    document.head.appendChild(script);
} else {
    // 开发环境初始化空Localize对象避免报错
    !function (a) {
        if (!a.Localize) {
            a.Localize = {};
            for (var e = ["translate", "untranslate", "phrase", "initialize", "translatePage", "setLanguage", "getLanguage", "getSourceLanguage", "detectLanguage", "getAvailableLanguages", "untranslatePage", "bootstrap", "prefetch", "on", "off", "hideWidget", "showWidget"], t = 0; t < e.length; t++) a.Localize[e[t]] = function () {}
        }
    }(window);
}
</script>
调试建议

你可以在线上环境临时加一行代码输出get_site_url()的实际返回值,确认是否和你写的判断字符串完全一致:

<?php echo '<!-- 当前站点地址:' . esc_html( get_site_url() ) . ' -->'; ?>

输出的内容可以在页面源代码中查看,就能快速定位判断失效的原因。

内容的提问来源于stack exchange,提问作者E Alexis MT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:42:00