Членство в 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

}

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


person Lim Zhiyang    schedule 27.09.2016    source источник


Ответы (4)


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

Например:

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

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

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

person Lim Zhiyang    schedule 27.09.2016

У меня похожая проблема в wordpress на странице content-product.php

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

Первая цена без скидки. Вторая цена с 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 
                        
                    ?>
person fxthtqkc    schedule 03.03.2021
comment
Привет и добро пожаловать в StackOverflow! Ваш пост не дает и ответа на вопрос. Пожалуйста, подумайте над тем, чтобы опубликовать свой собственный вопрос, и посмотрите здесь как написать хороший ответ, спасибо! - person BiOS; 03.03.2021

person    schedule
comment
Спасибо, сэр, очень полезно. - person hfarazm; 25.03.2021