通过终极会员用户角色隐藏Woocommerce立即购买按钮

时间:2018-04-11 08:38:20

标签: php wordpress woocommerce product user-roles

我正在尝试删除用户角色“um_member”的Woocommerce“立即购买”按钮。

我已经能够通过使用if ( is_user_logged_in() ) {

的登录用户删除该按钮

但是,当我尝试使用此处的用户角色代码段时:https://docs.ultimatemember.com/article/164-getrole if ( $ultimatemember->user->get_role() == ‘um_member’ ) {

我收到以下错误:Call to a member function get_role() on null

以下是登录用户的完整工作代码段:

// If User is not logged in don't allow them to purchase
if ( is_user_logged_in() ) {

} else {

    //function for deleting ....
function remove_product_description_add_cart_button(){
    global $product;

    // Set HERE your category ID, slug or name (or an array)
    $category = 'restricted';

    //Remove Add to Cart button from product description of product with id 1234   
    if ( has_term( $category, 'product_cat', $product->id ) ) 
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

}

以下是我尝试将其实现为受用户角色限制的方式:

// If User is not logged in don’t allow them to purchase

um_fetch_user( get_current_user_id() ); 
if ( $ultimatemember->user->get_role_name() == 'member' ) {

} else {

//function for deleting ….
function remove_product_description_add_cart_button(){
global $product;

// Set HERE your category ID, slug or name (or an array)
$category = 'restricted';

//Remove Add to Cart button from product description of product with id 1234
if ( has_term( $category, 'product_cat', $product->id ) )
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

}

任何帮助都会对此非常感激。我也尝试过Wordpress上的终极会员支持论坛,但尚未得到开发者的任何直接回复。

2 个答案:

答案 0 :(得分:1)

我完全重新审视了您的代码。在没有任何担保的情况下尝试以下操作:

add_action('woocommerce_single_product_summary','non_member_remove_single_add_to_cart', 2 );
function non_member_remove_single_add_to_cart(){
    global $product, $ultimatemember;

    um_fetch_user( get_current_user_id() ); 

    // Check if it's a member user role
    $is_member = $ultimatemember->user->get_role() == 'member' ? true : false;

    // HERE set your categories in the array (IDs, slugs or names)
    $categories = array('restricted');

    // Remove single Add to Cart button
    if ( ! $is_member && has_term( $category, 'product_cat', $product->get_id() ) )
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

代码放在活动子主题(或活动主题)的function.php文件中。未经测试,它可以工作。

基于这2个Ultimatemember片段代码:

答案 1 :(得分:1)

谢谢@LoicTheAztec!

我最终能够获得终极会员的支持,我的原始解决方案存在两个问题。

  1. 昨天UM 2.0主要更新中的全局变量发生了变化 - $ultimatemember->user->get_role()现在更改为UM()->user()->get_role() - 他们还没有改变文档。

  2. 代码仍然无效,因为每个成员都有多个角色(例如:wordpress默认'订阅者'&最终成员'成员')所以支持再次重新工作。

  3. 这是没有我的WooCommerce脚本的工作解决方案:

    $user = wp_get_current_user();
    if ( in_array( 'um_member', (array) $user->roles ) )
    {
        // DO THIS IF USER IS A MEMBER
    } else {
        // DO THIS IF USER IS NOT A MEMBER  
    }
    

    以下是我用来删除未经批准的客户按钮的完整解决方案,而是显示"受限制的产品"显示自定义字段的通知框:

    $user = wp_get_current_user();
    if ( in_array( 'um_member', (array) $user->roles ) )
    {
    
    } else {
    
        //function for deleting ....
    function remove_product_description_add_cart_button(){
        global $product;
    
        // Set HERE your category ID, slug or name (or an array)
        $category = 'restricted';
    
        //Remove Add to Cart button from product description of product with id 1234   
        if ( has_term( $category, 'product_cat', $product->id ) ) 
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    }
    
    add_action('wp','remove_product_description_add_cart_button');
    add_action( 'woocommerce_single_product_summary', 'restrict_access', 20 );
    
    }
    
    function restrict_access() {
        echo '<div class="restrict-access"><h4>';
        the_field('notice_title' , 'option');
        echo '</h4><p>';
        the_field('notice_details' , 'option');
        echo '</p><a class="et_pb_button" href="/restricted-product">';
        the_field('notice_button_text' , 'option');
        echo '</a></div>';
    }
    

    非常感谢你对此的帮助。