隐藏特定角色的“添加到购物车”按钮并替换为其他按钮

Hide Add to cart button for specific role and replace with other button

对于未登录的用户,我使用下面的 php 代码段。访问者看到“购买地点”按钮和“询问演示”按钮,而不是 Woocommerce 添加到购物车按钮。具有特定角色的登录用户/客户获得“添加到购物车按钮”,而不是未登录客户的 2 个按钮。还有一个 viewonly 角色,他有登录名并且可以下载资料,但在单个产品页面上没有添加到购物车按钮。然而,使用下面的代码,viewonly 用户仍然可以看到常规的“添加到购物车”按钮。知道我该如何解决这个问题吗?

add_action( 'init', 'disable_add_to_cart' );
 
function disable_add_to_cart() {
    if ( !is_user_logged_in() OR $user_role == 'viewonly' ) {
        add_filter( 'woocommerce_is_purchasable', '__return_false');
    }

function hide_price( $price ) {
  if ( !is_user_logged_in() ) {
    $price = '';
  $user_role = 'viewonly';
    }
  return $price;
}
  
add_filter( 'woocommerce_get_price_html', 'hide_price' );
add_filter( 'woocommerce_cart_item_price', 'hide_price' );
add_filter( 'woocommerce_cart_item_subtotal', 'hide_price' ); 
add_filter( 'woocommerce_order_formatted_line_subtotal', 'hide_price' );  
add_filter( 'woocommerce_cart_subtotal', 'hide_price' );  
add_filter( 'woocommerce_cart_totals_order_total_html', 'hide_price' ); 
} 
  
add_action( 'init', 'hide_price_add_cart_not_logged_in' );

function print_login_to_see() {
   echo '<div class="var-prod-container"><a class="btn-where-to-buy" href="/where-to-buy">' . __('Where to buy', 'company') . '</a>';
    echo '<a class="btn-ask-a-demo" href="/#uagb-tabs__tab1">' . __('Ask a demo', 'company') . '</a>';
        echo '</div>';
}
  
function hide_price_add_cart_not_logged_in() {   
   if ( ! is_user_logged_in() ) {      
      remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
      remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
      remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
      remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); 
    add_action( 'woocommerce_single_product_summary', 'print_login_to_see', 31 );
  }
}```

要替换按钮,您所要做的就是使用您删除的操作并将按钮功能放入其中。我使用 author 角色进行测试,但这将检查用户是否未登录以及他们的角色是什么。然后,从商店页面循环和单个产品页面中删除添加到购物车按钮。删除它们后,我们将我们想要的添加到刚刚删除按钮的位置。

如果需要,只需更改 if 语句中的条件,这将改变谁看到哪组按钮。

现在您所要做的就是按照您喜欢的方式设置按钮样式!

$user_role = wp_get_current_user(

function print_login_to_see() {
    echo '<div class="var-prod-container"><a class="btn-where-to-buy" href="/where-to-buy">' . __('Where to buy', 'company') . '</a>';
     echo '<a class="btn-ask-a-demo" href="/#uagb-tabs__tab1">' . __('Ask a demo', 'company') . '</a>';
         echo '</div>';
 }
 
 if ( current_user_can( 'viewonly' ) || !is_user_logged_in() ) { // Set the user role to the specific role you want to replace the buttons for.
     
     // Remove button from products in the loop and single product page
     remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart');
     remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
     
     // Add the actions you just removed, but insert your button function
     add_action( 'woocommerce_after_shop_loop_item', 'print_login_to_see');
     add_action( 'woocommerce_single_product_summary', 'print_login_to_see', 30 );
 }