Членство в WooCommerce проверяет, имеет ли пользователь (с текущим планом членства) доступ к содержимому

В настоящее время я пытаюсь проверить, есть ли у пользователя доступ к определенной странице (на основе их плана членства). Ниже приведен мой код, но кажется, что 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

}

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

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: условно для проверки доступа к странице

2

Другие решения

Согласно документации Вы можете передать конкретный идентификатор пользователя и имя плана, чтобы проверить, входит ли пользователь в конкретный план при просмотре этой страницы.

Например:

if (wc_memberships_is_user_active_member($user_id, 'silver_plan') {
// show content
} else {
// show sign up form
}
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
По вопросам рекламы [email protected]