2016-09-27 5 views
2

В настоящее время я пытаюсь проверить, имеет ли пользователь доступ к определенной странице (в соответствии с их планом членства). Ниже мой код, но, похоже, wc_memberships_is_user_active_member проверяет, является ли пользователь активным членом.Членство в WooCommerce проверяет, имеет ли пользователь (с текущим планом членства) доступ к содержимому

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

//do something 

} else { 

//do something 

} 

Заранее спасибо.

ответ

2

мне удалось сделать это на код ниже, то проверьте, если пользователь (с текущего членства) может получить доступ к странице:

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 
} 

ответа предоставленный Пауло: WooCommerce Memberships: Conditional to check a page access

1

According to the documentation вы можете передать конкретное имя пользователя и имя плана, чтобы проверить, соответствует ли пользователь конкретному плану при просмотре этой страницы.

Например:

if (wc_memberships_is_user_active_member($user_id, 'silver_plan') { 
    // show content 
} else { 
    // show sign up form 
} 
0
<?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"; 
} 
?>