Show or hide shipping methods based on user meta data in WooCommerce

You don’t need to have 2 functions, one for Wholesale customers and an other for non Wholesale customers… you can merge both in the same function as follows:

add_filter( 'woocommerce_package_rates', 'shipping_methods_based_on_wholesale_customer', 10, 2 );
function shipping_methods_based_on_wholesale_customer( $rates, $package ){
    $is_wholesale = get_user_meta( get_current_user_id(), 'wcs_wholesale_customer', true );
    // Set the shipping methods rate ids in the arrays:
    if( $is_wholesale ) {
        $shipping_rates_ids = array('flat_rate:1', 'flat_rate:4'); // To be removed for NON Wholesale users
    } else {
        $shipping_rates_ids = array('flat_rate:2'); // To be removed for Wholesale users

    // Loop through shipping rates fro the current shipping package
    foreach( $rates as $rate_key => $rate ) {
        if ( in_array( $rate_key, $shipping_rates_ids) ) {
            unset( $rates[$rate_key] ); 
    return $rates;

Code goes in functions.php file of the active child theme (or active theme). It should works.

Don’t forget to empty the cart after saving the code, to refresh cached shipping data

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top