WC_Shipping_Zones::get_zone_matching_package PHP Méthode

get_zone_matching_package() public static méthode

Find a matching zone for a given package.
Since: 2.6.0
public static get_zone_matching_package ( object $package ) : WC_Shipping_Zone
$package object
Résultat WC_Shipping_Zone
    public static function get_zone_matching_package($package)
    {
        $country = strtoupper(wc_clean($package['destination']['country']));
        $state = strtoupper(wc_clean($package['destination']['state']));
        $continent = strtoupper(wc_clean(WC()->countries->get_continent_code_for_country($country)));
        $postcode = wc_normalize_postcode(wc_clean($package['destination']['postcode']));
        $cache_key = WC_Cache_Helper::get_cache_prefix('shipping_zones') . 'wc_shipping_zone_' . md5(sprintf('%s+%s+%s', $country, $state, $postcode));
        $matching_zone_id = wp_cache_get($cache_key, 'shipping_zones');
        if (false === $matching_zone_id) {
            $data_store = WC_Data_Store::load('shipping-zone');
            $matching_zone_id = $data_store->get_zone_id_from_package($package);
            wp_cache_set($cache_key, $matching_zone_id, 'shipping_zones');
        }
        return new WC_Shipping_Zone($matching_zone_id ? $matching_zone_id : 0);
    }

Usage Example

 /**
  * Test: WC_Shipping_Zones::get_zone_matching_package
  */
 public function test_get_zone_matching_package()
 {
     // Setup
     WC_Helper_Shipping_Zones::create_mock_zones();
     // Test
     $zone1 = WC_Shipping_Zones::get_zone_matching_package(array('destination' => array('country' => 'GB', 'state' => 'Cambs', 'postcode' => 'CB23 1GG')));
     $zone2 = WC_Shipping_Zones::get_zone_matching_package(array('destination' => array('country' => 'GB', 'state' => 'Cambs', 'postcode' => 'PE12 1BG')));
     $zone3 = WC_Shipping_Zones::get_zone_matching_package(array('destination' => array('country' => 'US', 'state' => 'CA', 'postcode' => '90210')));
     $zone4 = WC_Shipping_Zones::get_zone_matching_package(array('destination' => array('country' => 'US', 'state' => 'AL', 'postcode' => '12345')));
     // Assert
     $this->assertEquals('Local', $zone1->get_zone_name());
     $this->assertEquals('Europe', $zone2->get_zone_name());
     $this->assertEquals('California', $zone3->get_zone_name());
     $this->assertEquals('US', $zone4->get_zone_name());
     // Clean
     WC_Helper_Shipping_Zones::remove_mock_zones();
 }
All Usage Examples Of WC_Shipping_Zones::get_zone_matching_package