上传站点后head标签内get_site_url校验失效、脚本始终执行如何解决?
问题原因分析
- 最常见的原因是
get_site_url()返回值和你写的判断字符串不完全匹配:比如站点后台配置的地址带尾随斜杠、协议实际为http、域名大小写存在差异等,全等判断===会直接不通过或者始终通过(如果你的开发环境也误配了生产域名的话)。 - 其次可能是站点开启了页面静态缓存/对象缓存,PHP判断逻辑仅在缓存生成时执行一次,后续访问直接返回缓存后的带脚本的页面,导致拦截逻辑失效。
- 部分多站点配置下,
get_site_url()返回的是当前站点的地址而非全局主站地址,也可能导致判断异常。
可落地的解决方案
方案1:使用WordPress官方环境变量判断(最推荐)
WordPress 5.5及以上版本内置了wp_get_environment_type()函数专门用于判断运行环境,无需硬编码域名,可靠性更高:
- 先在生产站点的
wp-config.php中添加配置:
define( 'WP_ENVIRONMENT_TYPE', 'production' );
- 开发环境的
wp-config.php对应配置为:
define( 'WP_ENVIRONMENT_TYPE', 'development' );
- 把你的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
相关产品推荐
相关产品推荐

