2
votes

I want to change the shipping method title displayed in the checkout of my store based on the shipping class the product has.

e.g.

Shipping method title is currently Flat Rate and I have 2 products:

  • If product A is being purchased I need it to have "Fragile shipping"
  • If product B is being purchased I need it to have "Standard shipping"

Sadly I have to do my shipping using classes so alternative methods won't work.

Any help would be appreciated.

2

2 Answers

4
votes

The following code will rename your shipping flat rate based on your "Fragile" shipping class:

You may have to "Enable debug mode" in general shipping settings under "Shipping options" tab, to disable temporarily shipping caches.

The code:

add_filter('woocommerce_package_rates', 'change_shipping_method_name_based_on_shipping_class', 50, 2);
function change_shipping_method_name_based_on_shipping_class($rates, $package){
    // HERE set the shipping class for "Fragile"
    $shipping_class_id = 64;
    $found = false;

    // Check for the "Fragile" shipping class in cart items
    foreach( $package['contents'] as $cart_item ) {
        if( $cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
            $found = true;
            break;
        }
    }

    // Loop through shipping methods
    foreach ( $rates as $rate_key => $rate ) {
        // Change "Flat rate" Shipping method label name
        if ( 'flat_rate' === $rate->method_id ) {
            if( $found )
                $rates[$rate_key]->label = __( 'Fragile shipping', 'woocommerce' );
            else
                $rates[$rate_key]->label = __( 'Standard shipping', 'woocommerce' );
        }
    }
    return $rates;
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.

Don't forget to re-enable "Enable debug mode" option in shipping settings.

0
votes

i think this plugin may help you and also check this one