WooCommerce Memberships check if user (with current membership plan) is able to access the contents

假如想象 提交于 2019-12-10 10:43:28

问题


Currently I am trying to check if the user has the access to certain page (based on their membership plan). Below is my code, but it seems like wc_memberships_is_user_active_member only check if the user is an 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

}

Thanks in advance.


回答1:


I managed to do it with the code below, it check whether if the user (with current membership) is able to access the page:

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
}

Answer provided by Paulo: WooCommerce Memberships: Conditional to check a page access




回答2:


According to the documentation you can pass in a specific user id and plan name in order to check if a user is on a specific plan when viewing this page.

For example:

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



回答3:


<?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";
}
?>



回答4:


<?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";
}


来源:https://stackoverflow.com/questions/39715523/woocommerce-memberships-check-if-user-with-current-membership-plan-is-able-to

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!