Próbuję uzyskać listę ID wysyłki według kraju jak Flat_Rate: 1, Local_Pickup: 2 itd. Próbowałem tego poniżej

$all_zones = WC_Shipping_Zones::get_zones();
$country_code = 'BE';
foreach ($all_zones as $zone) {
    foreach ($zone['zone_locations'] as $location) {
        if ($country_code === $location->code) {
            foreach ($zone['shipping_methods'] as $flat_rate) {
                print_r($flat_rate);//ID here
            }
        }
    }
}

Próbowałem też to, ale nie mogę sam ustalić kraju?

$shippingmethods = WC()->session->get( 'shipping_for_package_0')['rates'];
foreach ($shippingmethods as $shippingmethod ) {
    shippingmethod->get_id();
}
1
Mike 13 marzec 2021, 03:08

2 odpowiedzi

Najlepsza odpowiedź

Poniżej przedstawiono identyfikator szybkości wysyłki, której szukasz ... Działa dla wszystkich zdefiniowanych stref wysyłkowych, a także pozostałe światowej strefy wysyłkowej (gdy nie ma meczów krajowych) .

Kod:

// $country_code      = WC()->customer->get_shipping_country();
$country_code      = 'BE';
$defined_zones     = WC_Shipping_Zones::get_zones();
$shipping_rate_ids = array(); // Initializing
$country_found     = false;

// Loop through defined shipping zones
foreach ($defined_zones as $zone) {
    foreach ($zone['zone_locations'] as $location ) {
        if ( 'country' === $location->type && $country_code === $location->code ) {
            foreach ($zone['shipping_methods'] as $shipping_method ) {
                $method_id   = $shipping_method->id;
                $instance_id = $shipping_method->instance_id;
                $rate_id     = $method_id . ':' . $instance_id;

                $shipping_rate_ids[$instance_id] = $rate_id;
            }
            $country_found = true;
            break; // Country found stop "locations" loop
        }
    }
}

// Rest of the word (shipping zone)
if( ! $country_found ) {
    $zone = new \WC_Shipping_Zone(0); // Rest of the word (zone)

    foreach ( $zone->get_shipping_methods( true, 'values' ) as $shipping_method ) {
        $method_id   = $shipping_method->id;
        $instance_id = $shipping_method->instance_id;
        $rate_id     = $method_id . ':' . $instance_id;

        $shipping_rate_ids[$instance_id] = $rate_id;
    }
}

// testing raw output
echo '<pre>' . print_r( $shipping_rate_ids, true ) . '</pre>';

Przetestowane i działające.

2
LoicTheAztec 14 marzec 2021, 11:54

Zmieniono tę linię $ Method_id = $ shipping_method- & gt; metod_id; do $ shipping_method- & gt; ID;

Naprawiono to problem wydania Uwaga: Needfined Nieruchomość: WC_Shipping_Flat_Rate :: $ Method_id

// $country_code      = WC()->customer->get_shipping_country();
    $country_code      = 'NL';
    $defined_zones     = WC_Shipping_Zones::get_zones();
    $shipping_rate_ids = array(); // Initializing
    $country_found     = false;

    // Loop through defined shipping zones
    foreach ($defined_zones as $zone) {
        foreach ($zone['zone_locations'] as $location ) {
            if ( 'country' === $location->type && $country_code === $location->code ) {
                foreach ($zone['shipping_methods'] as $shipping_method ) {
                    $method_id   = $shipping_method->id;
                    $instance_id = $shipping_method->instance_id;
                    $rate_id     = $method_id . ':' . $instance_id;
                    $shipping_rate_ids[$instance_id] = $rate_id;
                }
                $country_found = true;
                break; // Country found stop "locations" loop
            }
        }
    }

// Rest of the word (shipping zone)
if( ! $country_found ) {
    $zone = new \WC_Shipping_Zone(0); // Rest of the word (zone)

    foreach ( $zone->get_shipping_methods( true, 'values' ) as $shipping_method ) {
        $method_id   = $shipping_method->id;
        $instance_id = $shipping_method->instance_id;
        $rate_id     = $method_id . ':' . $instance_id;

        $shipping_rate_ids[$instance_id] = $rate_id;
    }
}

echo '<pre>' . print_r( $shipping_rate_ids, true ) . '</pre>';

Testowany i pracować

1
Jop 14 marzec 2021, 11:44