Плата за корзину зависит от количества товаров в корзине в Woocommerce.

На основе этого кода ответа, в настоящее время мы используем специальный код, который добавляет $2.50 долларовую комиссию, когда количество равно 6.

Однако мы хотим, чтобы он добавлял комиссию $2.50, когда два продукта в одной и той же категории имеют количество 6 каждый.

Это почти работает, но когда есть два продукта в одной категории и один из них имеет количество 12, тогда фрагмент кода вместо того, чтобы сохранять $fee_amout на $2.50, меняет его на $7.50.

Таким образом, нам нужно найти способ лучше настроить таргетинг на отдельные продукты и их соответствующее количество или использование или уравнение и -5 от него всякий раз, когда он находит экземпляр продукта, имеющего количество 12.

function custom_pcat_fee( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

// Set HERE your categories (can be term IDs, slugs or names) in a coma separated array
$categories = array('649');
$fee_amount = 0;
$cat_count = 0; 

// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {

    if( has_term( $categories, 'product_cat', $cart_item['product_id']))
        $quantity = $cart_item['quantity'];
    $cat_count += $cart_item['quantity'];

}


if ($quantity == 6){
$fee_amount = (2.5 * ($cat_count/6));
;}  

// Adding the fee
if ( $fee_amount > 0 ){
    // Last argument is related to enable tax (true or false)
    WC()->cart->add_fee( __( "Find-it Mixed Case", "woocommerce" ), $fee_amount, false );
}
}

person David Weinstein    schedule 20.08.2018    source источник


Ответы (1)


Обновлено

Если я правильно понял, вы хотите добавить фиксированную плату за корзину, когда в корзине есть 2 товара из определенной категории продуктов, каждый из которых имеет количество больше или равно 6.

Попробуйте следующий код:

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

    // Set HERE your categories (can be term IDs, slugs or names) in a coma separated array
    $categories  = array('649');

    // Initializing
    $count = 0;

    // Loop through cart items
    foreach( $cart->get_cart() as $cart_item ) {
        if( has_term( $categories, 'product_cat', $cart_item['product_id'] ) ) {
            if( $cart_item['quantity'] >= 6 ){
                $count++;
            }
        }
    }

    if ( $count >= 1 ) {
        $fee_amount = 2.50 * $count;
        $cart->add_fee( __( "Shipping fee", "woocommerce" ), $fee_amount, false );
        // Last argument is related to enable tax (true or false)
    }
}

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

person LoicTheAztec    schedule 21.08.2018
comment
Эй, это действительно близко, но мы ищем код, который добавляет 2,50 доллара каждый раз, когда кто-то заказывает продукт в той же категории с фиксированным количеством 6. Таким образом, если два человека заказывают продукт с количеством 6, комиссия должна равняться 5,00 долларам. . - person David Weinstein; 21.08.2018
comment
Спасибо, это ответ на мой вопрос. - person David Weinstein; 31.08.2018