Home » WooCommerce: Get All Shipping Zones & Rates

WooCommerce: Get All Shipping Zones & Rates

by Tutor Aspire

As an advanced WooCommerce developer, at some stage you’re really going to need this PHP function, the same way you often browse through Business Bloomer’s WooCommerce visual hook guides or the product / order / cart getters.

This time we go study how to “get” the shipping zones and rates, because it’s likely that you will need to loop through them when you need to display shipping rates somewhere, or for other custom functionalities. Enjoy!

PHP Custom Function: Get All WooCommerce Shipping Zones

/**
 * @function      Get WooCommerce Shipping Zones
 * @how-to        Get tutoraspire.com FREE
 * @author        Tutor Aspire
 * @compatible    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com
 */

function tutoraspire_get_all_shipping_zones() {
$data_store = WC_Data_Store::load( 'shipping-zone' );
$raw_zones = $data_store->get_zones();
foreach ( $raw_zones as $raw_zone ) {
$zones[] = new WC_Shipping_Zone( $raw_zone );
}
$zones[] = new WC_Shipping_Zone( 0 ); // ADD ZONE "0" MANUALLY
return $zones;
}

You can then loop through the zones anywhere you need and access zone information:

foreach ( tutoraspire_get_all_shipping_zones() as $zone ) {
$zone_id = $zone->get_id();
$zone_name = $zone->get_zone_name();
$zone_order = $zone->get_zone_order();
$zone_locations = $zone->get_zone_locations();
$zone_formatted_location = $zone->get_formatted_location();
$zone_shipping_methods = $zone->get_shipping_methods(); // SEE BELOW
}

PHP Custom Function: Get All WooCommerce Shipping Rates

Once you have access to all shipping zones, you can also loop through each of their shipping methods.

/**
 * @function      Get All WooCommerce Shipping Rates
 * @how-to        Get tutoraspire.com FREE
 * @author        Tutor Aspire
 * @compatible    WooCommerce 5
 * @donate $9     https://www.tutoraspire.com
 */

function tutoraspire_get_all_shipping_rates() {
   foreach ( tutoraspire_get_all_shipping_zones() as $zone ) {
   $zone_shipping_methods = $zone->get_shipping_methods();
      foreach ( $zone_shipping_methods as $index => $method ) {
   $method_is_taxable = $method->is_taxable();
   $method_is_enabled = $method->is_enabled();
   $method_instance_id = $method->get_instance_id();
   $method_title = $method->get_method_title(); // e.g. "Flat Rate"
   $method_description = $method->get_method_description();
   $method_user_title = $method->get_title(); // e.g. whatever you renamed "Flat Rate" into
   $method_rate_id = $method->get_rate_id(); // e.g. "flat_rate:18"
      }
      print_r( $zone_shipping_methods );
}
}

You may also like