Сохраняйте максимальную фиксированную стоимость доставки и местный пикап в Woocommerce - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь показать самую высокую стоимость доставки в корзине. Я нашел хороший маленький фрагмент для этого:

function only_show_most_expensive_shipping_rate( $rates, $package ) {
    $most_expensive_method = '';
    $new_rates = array();
    // Loop through shipping rates
    if ( is_array( $rates ) ) {
        foreach ( $rates as $key => $rate ) {   
         // Set variables when the rate is more expensive than the one saved
         if ( empty( $most_expensive_method ) || $rate->cost > $most_expensive_method->cost ){
            $most_expensive_method = $rate;
         }

        }
    }
    // Return the most expensive rate when possible
    if ( ! empty( $most_expensive_method ) ){
       /**  
        ** Keep local pickup if it's present.
        **/
        foreach ( $rates as $rate_id => $rate ) {
            if ('local_pickup' === $rate->method_id ) {
                $new_rates[ $rate_id ] = $rate;
                break;
            }
        }
        return array( $most_expensive_method->id => $most_expensive_method );
    }
    return $rates;
}
add_action('woocommerce_package_rates', 'only_show_most_expensive_shipping_rate', 10, 2); 

Однако этот фрагмент также скрывает способ доставки "местный пикап".

Почему вышеуказанный метод не работает? Сейчас он показывает только самый высокий класс доставки / цену и скрывает все остальные, включая способ получения.

Это из-за двух массивов? Я не вижу никаких ошибок.

Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 03 января 2019

Следующее будет иметь самую высокую стоимость доставки по фиксированной ставке и способ доставки на месте:

add_action('woocommerce_package_rates', 'keep_highest_flat_rate_cost', 10, 2);
function keep_highest_flat_rate_cost( $rates, $package ) {
    $flat_rate_costs = [];

    // Loop through shipping methods rates
    foreach ( $rates as $key_rate => $rate ) {
        // Targeting only "Flat rate" type shipping methods
        if ( ! in_array( $rate->method_id, ['local_pickup', 'free_shipping'] ) ) {
            // Store the Rate ID keys with corresponding costs in an indexed array
            $flat_rate_costs[$key_rate] = $rate->cost;
        }
    }
    // Sorting "Flat rate" costs in DESC order
    arsort($flat_rate_costs);

    // Remove the highest cost from the array
    array_shift($flat_rate_costs);

    // Loop through remaining "Flat rate" shipping methods to remove them all
    foreach ( $flat_rate_costs as $key_rate => $cost){
        unset($rates[$key_rate]);
    }
    return $rates;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Вам необходимо обновить кэши доставки:
1) Сначала убедитесь, что код уже сохранен в вашем файле function.php.
2) В разделе «Параметры доставки» введите «Зона доставки»: отключите любой Способ доставки и «сохранить», затем снова включите его и «сохранить». Вы сделали.

...