/** * Get shipping zones from the database * @since 2.6.0 * @return array of arrays */ public static function get_zones() { global $wpdb; $raw_zones = $wpdb->get_results("SELECT zone_id, zone_name, zone_order FROM {$wpdb->prefix}woocommerce_shipping_zones order by zone_order ASC;"); $zones = array(); foreach ($raw_zones as $raw_zone) { $zone = new WC_Shipping_Zone($raw_zone); $zones[$zone->get_zone_id()] = $zone->get_data(); $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_zone_id()]['shipping_methods'] = $zone->get_shipping_methods(); } return $zones; }
/** * Get shipping zones from the database * @since 2.6.0 * @return array of arrays */ public static function get_zones() { $data_store = WC_Data_Store::load('shipping-zone'); $raw_zones = $data_store->get_zones(); $zones = array(); foreach ($raw_zones as $raw_zone) { $zone = new WC_Shipping_Zone($raw_zone); $zones[$zone->get_id()] = $zone->get_data(); $zones[$zone->get_id()]['zone_id'] = $zone->get_id(); $zones[$zone->get_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_id()]['shipping_methods'] = $zone->get_shipping_methods(); } return $zones; }
/** * Get the shipping methods for all shipping zones. * * Note: WooCommerce 2.6 intoduces the concept of Shipping Zones * * @return array (Array of) all shipping methods instances */ public function getZonesShippingMethods() { $zones = array(); // Rest of the World zone $zone = new \WC_Shipping_Zone(); $zones[$zone->get_zone_id()] = $zone->get_data(); $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_zone_id()]['shipping_methods'] = $zone->get_shipping_methods(); // Add user configured zones $zones = array_merge($zones, \WC_Shipping_Zones::get_zones()); $shipping_methods = array(); // Format: $shipping_methods[zone_name_method_id] => shipping_method_object // where zone_name is e.g. domestic, europe, rest_of_the_world, and // methods_id is e.g. flat_rate, free_shiping, local_pickup, etc foreach ($zones as $zone) { foreach ($zone['shipping_methods'] as $instance_id => $shipping_method) { // Zone names are converted to all lower-case and spaces replaced with $shipping_methods[$shipping_method->id . '_' . $instance_id] = $shipping_method; } } return $shipping_methods; }