问题
In Woocommerce I am using WooCommerce Wholesale Pro Suite (from IgniteWoo) and Flat Rate Box Shipping plugins to add B2B to our eshop.
I am trying to disable the Flat Rate Box Shipping for specific user roles, guests and customers. I found this code after searching online:
add_filter( 'woocommerce_package_rates', 'hide_shipping_for_user_role', 10, 2 );
function hide_shipping_for_user_role( $rates, $package ) {
// Role ID to be excluded
$excluded_role = "wholesale_customer";
// Shipping rate to be excluded
$shipping_id = 'table_rate_shipping_free-shipping';
// Get current user's role
$user = wp_get_current_user();
if ( empty( $user ) ) return false;
if( in_array( $excluded_role, (array) $user->roles ) && isset( $rates[ $shipping_id ] ) )
unset( $rates[ $shipping_id ] );
return $rates;
}
What should I use in place of "wholesale_customer
" and in place of "table_rate_shipping_free-shipping
", so the Flat Rate Box Shipping is not showing, for guests and customers roles?
Any help is appreciated.
回答1:
Update 2:
You may have to "Enable debug mode" in general shipping settings under "Shipping options" tab, to disable temporarily shipping caches.
For info: The shipping method ID for "Flat rate boxes" is flat_rate_boxes
.
The following code will disable "Flat rate boxes" Shipping Methods For "Guests" (non logged in users) and "customer" user role:
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method_based_on_user_role', 30, 2 );
function hide_specific_shipping_method_based_on_user_role( $rates, $package ) {
## --- Your settings --- ##
$excluded_role = "customer"; // User role to be excluded
$shipping_id = 'flat_rate_boxes'; // Shipping rate to be removed
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id === $shipping_id ){
if( current_user_can( $excluded_role ) || ! is_user_logged_in() ){
unset($rates[$rate_key]);
break;
}
}
}
return $rates;
}
Code goes in function.php file of your active child theme (or active theme). Tested and works.
Don't forget to enable back shipping cache.
来源:https://stackoverflow.com/questions/52746698/hide-specific-shipping-methods-for-a-specific-user-roles-in-woocommerce