Добавить плату в зависимости от высоты товаров в Woocommerce - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь найти функцию, которая автоматически добавляет плату в корзину, если высота продуктов в ней превышает 2,9 см.

Я использую Woocommerce для нашего простого некоммерческого магазина комиксов.Мы используем весовую доставку как стандарт в Швеции, с громоздкой платой, если что-то составляет 3 см или более.

Я пытался изменить этот ответ LoicTheAztec относительно сборов, основанных на общей сумме корзинывес, но я действительно не знаю, что я делаю, потому что после сохранения кода я получаю пустую страницу.

Код, который я пытаюсь изменить, такой:

add_action( 'woocommerce_cart_calculate_fees', 'shipping_weight_fee', 30, 1 );
function shipping_weight_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Convert cart weight in grams
    $cart_weight = $cart->get_cart_contents_weight() * 1000;
    $fee = 50; // Starting Fee below 500g

    // Above 500g we add $10 to the initial fee by steps of 1000g
    if( $cart_weight > 1500 ){
        for( $i = 1500; $i < $cart_weight; $i += 1000 ){
            $fee += 10;
        }
    }
    // Setting the calculated fee based on weight
    $cart->add_fee( __( 'Weight shipping fee' ), $fee, false );
}

Мой опыт работы с php не больше, чем возможность вставить действия в функции моей дочерней темы. Php.

Я ценю любую помощь, которую могу получить.

1 Ответ

0 голосов
/ 25 февраля 2019

Следующий код добавит определенную плату, если какой-либо элемент корзины имеет высоту до 3 см (настройка единицы измерения в Woocommerce должна быть в см ) :

add_action( 'woocommerce_cart_calculate_fees', 'shipping_height_fee', 10, 1 );
function shipping_height_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Your settings (here below)
    $height = 3; // The defined height in cm (equal or over)
    $fee    = 50; // The fee amount
    $found  = false; // Initializing

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ){
        if( $cart_item['data']->get_height() >= $height ) {
            $found = true;
            break; // Stop the loop
        }
    }
    // Add the fee
    if( $found ) {
        $cart->add_fee( __( 'Height shipping fee' ), $fee, false );
    }
}

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


Добавление: Код, основанный на общей высоте элементов корзины:

add_action( 'woocommerce_cart_calculate_fees', 'shipping_height_fee', 10, 1 );
function shipping_height_fee( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // Your settings (here below)
    $target_height = 3; // The defined height in cm (equal or over)
    $total_height  = 0; // Initializing
    $fee           = 50; // The fee amount

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ){
        $total_height += $cart_item['data']->get_height() * $cart_item['quantity'];
    }
    // Add the fee
    if( $total_height >= $target_height ) {
        $cart->add_fee( __( 'Height shipping fee' ), $fee, false );
    }
}

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

...