WooCommerce 会员资格检查用户(具有当前会员计划)是否能够访问内容

问题描述 投票:0回答:6

目前,我正在尝试检查用户是否有权访问某个页面(基于他们的会员计划)。下面是我的代码,但似乎 wc_memberships_is_user_active_member 仅检查用户是否是活跃会员。

if( wc_memberships_is_post_content_restricted() && is_page($postid) && wc_memberships_is_user_active_member( $membership_plan ) ) {

//do something

} else {

//do something

}

提前致谢。

php wordpress woocommerce conditional-statements woocommerce-memberships
6个回答
5
投票

我设法使用下面的代码来做到这一点,它检查用户(具有当前会员资格)是否能够访问该页面:

function can_user_access_content($user_id,$post_id){
    //check if there's a force public on this content    
    if(get_post_meta($post_id,'_wc_memberships_force_public',true)=='yes') return true;
    $args = array( 'status' => array( 'active' ));
    $plans = wc_memberships_get_user_memberships( $user_id, $args );
    $user_plans = array();
    foreach($plans as $plan){
        array_push($user_plans,$plan->plan_id);
    }
    $rules = wc_memberships()->get_rules_instance()->get_post_content_restriction_rules( $post_id );

    foreach($rules as $rule){
        if(in_array($rule->get_membership_plan_id(), $user_plans)){
            return true;
        }
    }       
    return false;
}

if(can_user_access_content(get_current_user_id(),$post->ID)){
    //do something
} else {
    //do something
}

Paulo提供的答案: WooCommerce 会员资格:有条件检查页面访问权限


3
投票

根据文档,您可以传入特定的用户 ID 和计划名称,以便在查看此页面时检查用户是否使用特定计划。

例如:

if (wc_memberships_is_user_active_member($user_id, 'silver_plan') {
    // show content
} else {
   // show sign up form
}

3
投票
<?php
$curr_user_id = get_current_user_id();

$memberships = array( 'plan-slug-1', 'plan-slug-2', 'plan-slug-3' );

if ( wc_memberships_get_user_memberships( $curr_user_id, $memberships ) ) { 
    echo "You are a member so you can view this content";
} else {
    echo "Become a member to view this content";
}

1
投票
<?php
// get all active memberships for a user; 
// returns an array of active user membership objects
// or null if no memberships are found
$user_id = get_current_user_id();
$args = array( 
    'status' => array( 'active', 'complimentary', 'pending' ),
);  
$active_memberships = wc_memberships_get_user_memberships( $user_id, $args );
if ( ! empty( $active_memberships ) ) {
echo "User is active";
}
?>

0
投票

我在 content-product.php 页面上的 wordpress 上也有类似的问题

这就是我想要给出的...遗憾的是不起作用...知道我可以用什么来检查我的会员是否得到了他们的计划并显示了相应的价格吗?

首发价无折扣。第二个价格是有vip折扣的。

<?php  
                        if (wc_memberships_is_user_active_member($user_id, 'pack-vip') {
                        echo $price_val, $symbol    
                        } else {
                        echo $price_val - $vip_discount, $symbol    
                        }

所以我尝试了几种替代方案来回显......

                        //print / printf /printr doesn't work
                        //return (doesn't work)
                        //echo (doesn't work)
                        //empty before $price_val (doesn't work)

                        //What i want to deliver is something like 
                        //echo $price_val - $vip_discount, $symbol // 
                        //Without if or else, works fine but only for 
                        //users without the pack VIP.
                        //For users with pack VIP, it reduces the prices 
                        //again on it
                        //Solution, need to split with if else in content- 
                        //product.php to verify
                        //If user is active member of 'pack-vip' (slug) 
                        //Display the price without $vip_discount 
                        
                    ?>

0
投票
<?php if ( current_user_can( 'wc_memberships_view_restricted_post_content', $post->ID ) ) {
  // User has access
} else {
  // User has not access
} ?>
© www.soinside.com 2019 - 2024. All rights reserved.