如何在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在条件满足时再请求:
- 先在主题的
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响应 }
- 前端页面的代码:
<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.
相关产品推荐
相关产品推荐

