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

WooCommerce Memberships:如何检查特定用户对指定内容的访问权限?

如何判断WooCommerce Memberships用户是否有权访问特定内容

我明白你的困扰了——你现在的代码只是分开检查了「帖子是否受限」和「用户是否拥有某个会员级别」,但没有把两者关联起来,完全没验证用户的会员级别是否匹配帖子的访问限制规则,这才导致不管用户能不能访问目标内容,都返回"You"的错误结果。

其实WooCommerce Memberships本身就提供了直接的函数来完成这个判断,不用自己拆分逻辑。

修正后的最简代码示例

直接用wc_memberships_user_can_access_post()函数,它会同时校验帖子的访问限制和用户的会员资格,一步到位给出结果:

$post_id = get_the_ID();
$user_id = get_current_user_id();

// 直接判断当前用户是否有权限访问该帖子
if ( wc_memberships_user_can_access_post( $user_id, $post_id ) ) {
    echo "你有权限访问该内容";
} else {
    echo "你没有权限访问该内容";
}

如果需要更精细的控制(比如查看帖子的具体访问规则)

要是你想手动核对用户会员和帖子的限制规则,可以先获取帖子的访问规则列表,再逐一对比用户的会员:

$post_id = get_the_ID();
$user_id = get_current_user_id();

// 获取当前帖子的所有访问限制规则
$access_rules = wc_memberships_get_post_access_rules( $post_id );

$has_access = false;

// 遍历规则,检查用户是否符合其中任意一条
foreach ( $access_rules as $rule ) {
    // 确认规则指定了会员级别,且用户拥有该活跃会员
    if ( ! empty( $rule['membership_plan'] ) && wc_memberships_is_user_active_member( $user_id, $rule['membership_plan'] ) ) {
        $has_access = true;
        break;
    }
}

if ( $has_access ) {
    echo "你有权限访问该内容";
} else {
    echo "你没有权限访问该内容";
}

补充:原代码出错的原因

你的原代码里,wc_memberships_is_user_active_member( $user_id, 'resources' )只检查用户是否持有resources会员,完全没关联帖子的访问限制(帖子仅对insights会员开放)。所以哪怕用户的会员和帖子要求完全不匹配,只要有resources会员就会返回"You",这自然不是你想要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:22:52