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

WordPress如何仅向订阅者和访客展示头部Adsense代码

问题根因
  • WordPress 无内置visitor用户角色,未登录访问者调用wp_get_current_user()返回的用户对象roles属性为空数组,因此原判断无法匹配访客场景。
  • 原array_intersect判断逻辑仅能匹配登录用户的角色,未覆盖未登录场景。
可行实现方案

方案1:基础逻辑实现(最直观)

直接先判断用户是否未登录,再判断已登录用户是否为subscriber角色:

<?php
$user = wp_get_current_user();
// 未登录用户 或 角色为subscriber的登录用户,输出广告代码
if ( 0 === $user->ID || in_array( 'subscriber', $user->roles ) ) {
    echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXX" crossorigin="anonymous"></script>';
}
?>

方案2:使用array_diff实现(满足你指定的函数需求)

如果需要用array_diff实现角色匹配,逻辑如下:

<?php
$user = wp_get_current_user();
$allowed_roles = [ 'subscriber' ];
// 未登录,或者当前用户角色全部在允许角色列表内,输出广告
if ( 0 === $user->ID || empty( array_diff( $user->roles, $allowed_roles ) ) ) {
    echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXX" crossorigin="anonymous"></script>';
}
?>
注意事项
  • 代码需要挂载到WordPress的wp_head钩子中,才能正确输出到页面HEAD部分,相比直接硬编码到主题模板header.php更易维护,挂载示例:
add_action( 'wp_head', function() {
    $user = wp_get_current_user();
    $allowed_roles = [ 'subscriber' ];
    if ( 0 === $user->ID || empty( array_diff( $user->roles, $allowed_roles ) ) ) {
        echo '<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXX" crossorigin="anonymous"></script>';
    }
} );
  • 如果站点有多角色配置,可根据实际需求调整允许的角色列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:48:02