WooCommerce会员资格:有条件检查页面访问权限

时间:2016-06-08 23:11:26

标签: php wordpress woocommerce conditional woocommerce-memberships

我有一个Wordpress会员资格网站,它建立在WooCommerce上,带有WooCommerce Memberships插件,可以将某些页面限制为仅限会员。

其中一些页面是"滴水" ...即。购买后3天即可访问这些页面等。我已在WooMemberships中设置了这些页面。

我正在尝试简单地进行PHP条件检查,以查看当前用户是否可以访问某个页面。

我在文档中找到了这段代码:wc_memberships_is_post_content_restricted()

然而,我无法使其发挥作用。

是否有代码片段基本上会对当前用户是否有权访问某个页面(使用page ID)执行PHP IF语句?

例如:

if ( current_user_has_access(page_ID) ) { DO SOMETHING } else { DON'T }

感谢。

3 个答案:

答案 0 :(得分:3)

我在StoryMoment.com处理同样的问题(我们为孩子们制作了音频+电子书故事系列)。

这就是我处理它的方式。我在页面模板中使用以下内容来显示或隐藏基于访问的页面元素。 wc_memberships_view_delayed_post_content会根据内容的类型而改变。

您可以在文件中看到其他选项:

类-WC-成员-capabilities.php

<?php 

$has_access = current_user_can( 'wc_memberships_view_delayed_post_content', $post->ID );

if ($has_access) {

//do something

} else {

//do something else

}

?>

答案 1 :(得分:2)

我不确定这是否有帮助,但这是我的看法。我首先浏览所有用户的活动成员资格,然后检查内容$规则以查看受限制的计划是否属于用户成员资格计划的一部分(in_array)

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 whatever here
}

答案 2 :(得分:1)

您必须替换(在条件中):

    您的$page_id号码
  1. page ID(例如:is_page(42))
  2. $membership_plan计划的标题('plan_slug')或相关的post ID
  3. 条件:

    • wc_memberships_is_post_content_restricted($page_id) =&gt;如果true被撤回,则$page_id
    • is_page($page_id) =&gt;如果是实际$page_id,则为true。
    • wc_memberships_is_user_active_member( $membership_plan ) =&gt; true实际用户是此$membership_plan计划的有效成员。在这种情况下,用户的suscription计划授予对页面的访问权。

    如果不需要,您可以删除一些条件,并根据您的需要进行微调。

    if( wc_memberships_is_post_content_restricted() && is_page($page_id) && wc_memberships_is_user_active_member( $membership_plan ) ) {
    
        // do something
    
    } else {
    
        // don't
    
    }
    

    ---更新---

    与限制和(或)时间访问相关的唯一功能是:

    1)wc_memberships_restrict( $content, $membership_plans, $delay, $exclude_trial )
    就像短代码[wcm_restrict]一样(所以没用)......

    2)wc_memberships_get_user_access_time( $user_id, $target, $action, $gmt ):参数

    $user_id  // for a logged 'user ID'
    $target   : array('post' => id, 'product' => id) // content_type and content_id
    $action   : 'view' or 'purchase' // Type of access (products only)<br>
    $gmt =>   : true  or  false // (selection of the time zone)
    // Returns user access start timestamp (in site timezone) for content or a product
    

    参考:WooCommerce Memberships Function Reference