Всего корзин на основе категории товаров и количества товаров в Woocommerce - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь установить общую сумму корзины в £ 10, когда в корзине 4 товара И ни один из товаров не относится к категории "Рождество".

Например,

  • 4 товара в корзине, но 4 из категории рождество .Игнорируйте правило и следуйте за цену товара.
  • 4 товара в корзине, но 4 из категории не рождественские .Установите цену в корзине £ 10.
  • 4 товара в корзине, но 2 из категории рождество .Игнорируйте правило и следуйте за ценой за единицу товара.

Я написал код, который в настоящее время работает, чтобы установить любые 4 корзины на £ 10:

add_filter( 'woocommerce_calculated_total', 'calculated_total', 10, 2 );
function calculated_total( $total, $cart ) {
    $taster_item_count = 4;
    if ( $cart->cart_contents_count == $taster_item_count ) {
        return 10;
    }
    return $total;
}

Однако, когда я пытаюсь добавить в категорию условное, оно не следует правилу?:

    add_filter( 'woocommerce_calculated_total', 'calculated_total', 10, 2 );

// check each cart item for  category
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

    $product = $cart_item['data'];

    // ONLY EXECUTE BELOW FUNCTION IF DOESN'T CONTAIN CHRISTMAS CATEGORY
    if ( !has_term( 'christmas', 'product_cat', $product->id ) ) {

function calculated_total( $total, $cart ) {
    $taster_item_count = 4;
    if ( $cart->cart_contents_count == $taster_item_count ) {
        return 10;
    }
    return $total;
}
    }
}

1 Ответ

0 голосов
/ 28 ноября 2018

Обновлено: В вашем коде есть ошибки, попробуйте вместо этого:

add_filter( 'woocommerce_calculated_total', 'calculated_total', 10, 2 );
function calculated_total( $total, $cart ) {
    $taster_count = 4;
    $item_count   = $cart->get_cart_contents_count();
    $chistm_count = 0;

    foreach ( $cart->get_cart() as $cart_item ) {
        if ( ! has_term( 'christmas', 'product_cat', $cart_item['product_id'] ) ) {
            $chistm_count += $cart_item['quantity'];
        }
    }
    if( $taster_count == $item_count && $chistm_count == $taster_count ) {
        $total = 10;
    }
    return $total;
}

Должно работать лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...