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
相关产品推荐
相关产品推荐

