我正在尝试将WooCommerce会员资格与一些自定义高级自定义字段代码和Timber / Twig Wordpress设置集成在一起。我发现good function here用于检查用户是否可以访问内容。不幸的是,当我的管理员角色甚至没有访问权限时,我遇到了一些困难。在调试中,我发现使用当前用户ID调用wc_memberships_get_user_memberships
时,它将在我的管理员用户上返回NULL。此后,我添加了一项检查,以查看用户是shop_manager还是管理员,并始终为他们返回true。
function can_user_access_content($user_id,$post_id){
// bail if Memberships isn't active
if ( ! function_exists( 'wc_memberships' ) ) {
return true;
}
$user = get_user_by('id',$user_id);
if ( in_array( 'administrator', (array) $user->roles ) || in_array( 'shop_manager', (array) $user->roles ) ) {
//The user has the "administrator" or "shop manager" role
return true;
}
//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 );
if(!count($rules)) {
return true;
}
foreach($rules as $rule){
if(in_array($rule->get_membership_plan_id(), $user_plans)){
return true;
}
}
return false;
}
这是实现此目标的正确方法吗?我也在努力寻找一种方法来检索要显示的页面/帖子/产品的相应“内容不可用”消息。如果内容受限制,我将回到常规的帖子内容显示中,这些内容通常会在我的WC会员资格中过滤掉消息,但这似乎并不总是有效。会喜欢一些更简单的方法。
任何帮助将不胜感激!
答案 0 :(得分:0)
该插件已经为此提供了功能:
function wc_memberships_is_product_viewing_restricted( $post_id = null )
似乎他们已经处理了管理员逻辑,因为在FAQ中,他们指出:
作为您网站上的管理员(或商店经理)用户,没有任何内容 将仅限于您,以便您可以轻松地管理自己的网站。
答案 1 :(得分:0)
我直接联系了WooCoomerce开发人员,并得到以下答复:
您的方法对我来说看起来不错。不幸的是,你是对的 不是用于检查当前 内容可供当前用户访问。它需要写 作为自定义功能,就像您在此处所做的一样。
结合使用以下方法可能还有其他方法
wc_memberships_get_user_memberships()
和wc_memberships_is_user_active_member()
,但您采用的方法 对我来说还可以。
因此上述方法似乎还可以。