如何在WordPress头部的PHP条件语句中正确包裹Google AdSense脚本(基于PaidMembership Pro插件)
正确实现PaidMembership Pro条件加载Google AdSense的方法
你遇到的问题很典型——在PHP代码块里直接写入HTML内容,PHP解析器无法识别这种混合写法,所以才会报错。我给你整理几种正确的写法,以及更符合WordPress规范的实现方式:
方法1:在PHP中用echo输出AdSense脚本
把HTML脚本通过echo输出,注意处理引号冲突(HTML里用了双引号,外层用单引号包裹即可):
<?php if ( function_exists( 'pmpro_displayAds' ) && pmpro_displayAds() ) { echo '<script data-ad-client="ca-pub-111111111111111" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>'; } ?>
方法2:切换PHP/HTML模式
临时关闭PHP标签,直接编写HTML内容,之后再打开PHP标签闭合条件语句:
<?php if ( function_exists( 'pmpro_displayAds' ) && pmpro_displayAds() ) { ?> <script data-ad-client="ca-pub-111111111111111" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <?php } ?>
更推荐的方法:用WordPress规范的脚本加载方式
直接修改header.php有个隐患——主题更新后你的自定义代码会被覆盖。更稳妥的做法是在主题的functions.php里添加代码,通过WordPress官方的脚本加载API实现条件加载:
function load_pmpro_adsense() { // 检查PMPro函数存在且需要显示广告 if ( function_exists( 'pmpro_displayAds' ) && pmpro_displayAds() ) { wp_enqueue_script( 'google-adsense', 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js', array(), // 无依赖脚本,留空即可 null, // 版本号,无需指定 false // 是否在footer加载,AdSense放header选false ); // 给脚本添加data-ad-client属性 add_filter( 'script_loader_tag', function( $tag, $handle ) { if ( 'google-adsense' !== $handle ) { return $tag; } return str_replace( ' src', ' data-ad-client="ca-pub-111111111111111" async src', $tag ); }, 10, 2 ); } } add_action( 'wp_enqueue_scripts', 'load_pmpro_adsense' );
额外注意事项
- 确认
pmpro_displayAds()的返回逻辑:这个函数应该在非会员用户访问时返回true,会员访问时返回false,才能实现会员隐藏广告的效果。如果逻辑相反,你可以把条件改成!pmpro_displayAds()。 - 测试时记得切换会员和非会员账号,验证广告是否正确显示/隐藏。
- 如果一定要修改
header.php,建议使用子主题,避免主题更新丢失自定义内容。
内容的提问来源于stack exchange,提问作者Yonder Mann
相关产品推荐
相关产品推荐

