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

如何在JavaScript的if条件中触发PHP代码?验证WordPress短代码执行可行性

你的WordPress条件执行短代码方案不可行,原因及修正方法

你写的这段代码无法实现预期效果,核心问题是搞混了PHP和JavaScript的执行顺序:

  • PHP是服务器端语言,页面发送到浏览器前就会全部执行完毕;
  • JavaScript是客户端语言,要等页面加载到浏览器后才会运行。

所以不管sssp.displaySeznamAds()的返回结果是true还是false,<?php echo do_shortcode('[seznam-ads id="164107"]'); ?>都会被服务器提前执行,直接把短代码生成的内容输出到页面,完全起不到条件判断的作用。

修正方案一:提前生成内容,用JS控制显示/隐藏

这种方案适合广告内容不大的场景,提前生成内容后用JS控制是否显示:

<script src="https://ssp.seznam.cz/js/ssp.js"></script>
<?php
// 提前执行短代码,把广告内容存在变量里
$seznam_ad_content = do_shortcode('[seznam-ads id="164107"]');
?>
<div id="seznam-ad-wrap" style="display:none;"><?php echo $seznam_ad_content; ?></div>
<script>
if (sssp.displaySeznamAds()) {
    // 条件满足时显示广告容器
    document.getElementById('seznam-ad-wrap').style.display = 'block';
} else {
    // 条件不满足时显示其他内容
    document.write('do 30min');
}
</script>

修正方案二:AJAX动态请求广告内容

如果广告内容较大,不想提前加载到页面里,可以用AJAX在条件满足时再请求:

  1. 先在主题的functions.php中添加AJAX处理函数:
// 登录用户和未登录用户都能调用这个AJAX接口
add_action('wp_ajax_seznam_ad_load', 'load_seznam_ad_content');
add_action('wp_ajax_nopriv_seznam_ad_load', 'load_seznam_ad_content');

function load_seznam_ad_content() {
    echo do_shortcode('[seznam-ads id="164107"]');
    wp_die(); // 必须加上,终止AJAX响应
}
  1. 前端页面的代码:
<script src="https://ssp.seznam.cz/js/ssp.js"></script>
<div id="ad-target"></div>
<script>
if (sssp.displaySeznamAds()) {
    // 条件满足时,通过AJAX请求广告内容
    fetch('<?php echo admin_url('admin-ajax.php'); ?>?action=seznam_ad_load')
        .then(res => res.text())
        .then(content => {
            document.getElementById('ad-target').innerHTML = content;
        });
} else {
    document.write('do 30min');
}
</script>

内容的提问来源于stack exchange,提问作者Pavel H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:41