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

根据URL显示不同短代码的脚本问题求助

问题排查与代码修正

原代码存在的核心问题

  • 变量不匹配:定义了pages变量却使用未声明的url变量
  • 前后端代码混用:echo do_shortcode()是WordPress的服务器端PHP函数,不能直接写在客户端<script>的JS代码里
  • URL匹配逻辑错误:window.location.href是包含域名的完整URL,直接和/?listing_region=alicante这类路径片段比较永远不会匹配
  • 语法错误:if/else语句的大括号未正确配对,嵌套逻辑混乱

修正方案(推荐服务器端PHP处理,适配WordPress场景)

因为do_shortcode是WordPress的服务器端函数,必须在PHP模板文件中调用,以下是修正后的代码:

<?php
// 获取URL中的listing_region参数
$region = isset($_GET['listing_region']) ? $_GET['listing_region'] : '';

// 根据参数输出对应短代码,用switch替代嵌套if更清晰
switch ($region) {
    case 'alicante':
    case 'barcelona':
        echo do_shortcode('[template id="11570"]');
        break;
    case 'madrid':
        echo do_shortcode('[template id="11571"]');
        break;
    default:
        // 无匹配参数时的默认内容,可自行修改
        echo '默认显示内容';
        break;
}
?>

使用说明:将这段代码插入到WordPress的对应模板文件中(比如page.php、自定义页面模板等),服务器会在页面渲染前根据URL参数输出对应的短代码内容。


若需前端JS处理(仅作参考,无法直接调用do_shortcode)

如果需要前端动态判断参数并展示内容,需提前准备好短代码渲染后的内容,或通过AJAX请求获取:

<script>
// 封装获取URL参数的工具函数
function getUrlParam(paramName) {
    const params = new URLSearchParams(window.location.search);
    return params.get(paramName);
}

// 获取当前页面的region参数
const region = getUrlParam('listing_region');
// 页面中需要一个容器来承载内容
const contentContainer = document.getElementById('template-content');

// 根据参数切换内容
switch (region) {
    case 'alicante':
    case 'barcelona':
        contentContainer.innerHTML = '<div>这里是ID为11570的模板内容</div>';
        break;
    case 'madrid':
        contentContainer.innerHTML = '<div>这里是ID为11571的模板内容</div>';
        break;
    default:
        contentContainer.innerHTML = '<div>默认展示内容</div>';
        break;
}
</script>

<!-- 页面中添加内容容器 -->
<div id="template-content"></div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16