【问题标题】:WooCommerce Memberships check if user (with current membership plan) is able to access the contentsWooCommerce 会员资格检查用户(具有当前会员计划)是否能够访问内容
【发布时间】:2017-02-04 13:06:15
【问题描述】:

目前,我正在尝试检查用户是否有权访问某个页面(基于他们的会员计划)。下面是我的代码,但似乎 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


    【解决方案1】:

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

    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 Memberships: Conditional to check a page access

    【讨论】:

      【解决方案2】:

      According to the documentation您可以传入特定的用户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";
        }
        

        【讨论】:

          【解决方案4】:
          <?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";
          }
          ?>
          

          【讨论】:

          • 谢谢先生,真的很有帮助。
          【解决方案5】:

          我在 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    
                                  }
          

          所以我尝试了一些替代 echo...

                                  //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 
                                  
                              ?>
          

          【讨论】:

          • 您好,欢迎来到 StackOverflow!您的帖子没有提供和回答问题。请考虑发布您自己的问题,并在how to write a good answer 上查看这里,谢谢!
          猜你喜欢
          • 2020-12-08
          • 2018-12-20
          • 1970-01-01
          • 2016-10-08
          • 2022-08-22
          • 2018-09-29
          • 2016-10-09
          • 1970-01-01
          • 2015-11-29
          相关资源
          最近更新 更多