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

Hide Woocommerce Buy Now button by Ultimate Member User Role

我正在尝试删除用户角色“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 上的 Ultimate Member 支持论坛,但还没有得到开发人员的任何直接回应。

我已经完全重新访问了您的代码。在没有任何保证的情况下尝试以下操作:

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 片段代码:

谢谢@LoicTheAztec!

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

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

  2. 该代码仍然无法正常工作,因为每个成员都有多个角色(例如:wordpress 默认 'subscriber' 和最终成员的 'member')所以再次支持 re-worked .

这是没有我的 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  
}

这是我用来为 non-approved 客户删除“立即购买”按钮并显示显示自定义字段的 "Restricted Products" 通知框的完整解决方案:

$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>';
}

非常感谢您对此的帮助。