在WooCommerce中删除特定用户角色的添加到购物车按钮

Luc*_*gal 6 php wordpress product cart woocommerce

在我使用Divi主题和woocommerce的虚拟商店中,我有两组用户:最终用户和我的经销商,在我的终端客户端的情况下,只需要出现"购买"按钮.我的经销商已经只有"添加到订单"按钮(由YITH Request A Quote插件提供).如果怀疑如何删除转销商帐户的添加到购物车按钮,我知道使用代码:

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 );
Run Code Online (Sandbox Code Playgroud)

我从整个网站删除按钮,但我试图使用某种if能够只定义一个组.像这样的东西:

$user = wp_get_current_user();
if ( in_array( 'Revenda', (array) $user->roles ) ) {
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 );
}
Run Code Online (Sandbox Code Playgroud)

或这个:

if( current_user_can('revenda') ) {
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 );
}
Run Code Online (Sandbox Code Playgroud)

我也在尝试这段代码:

function user_filter_addtocart_for_shop_page(){
    $user_role = get_user_role();
    $role_id = get_role('Revenda');
    if($user_role == $role_id){
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
    }
}
Run Code Online (Sandbox Code Playgroud)

get_user_role将从以下位置显示:

function get_user_role() {
    global $current_user;

    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);

    return $user_role;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢

Loi*_*tec 4

执行您想要执行的操作的正确代码(用户角色名称为小写,我用它get_userdata(get_current_user_id())来获取用户数据。

所以我对你的代码做了一些更改:

function remove_add_to_cart_for_user_role(){
    // Set Here the user role slug
    $targeted_user_role = 'revenda'; // The slug in "lowercase"
    $user_data = get_userdata(get_current_user_id());
    if ( in_array( $targeted_user_role, $user_data->roles ) ) {
        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 );
    }
}
add_action('init', 'remove_add_to_cart_for_user_role');
Run Code Online (Sandbox Code Playgroud)

我已将代码嵌入到钩子上触发的函数中init

该代码已经过测试并且功能齐全。

代码位于活动子主题(或主题)的 function.php 文件中。或者也可以在任何插件 php 文件中。