Ограничение добавления в корзину 'product_cat', когда в корзине уже более 5 'product_cat' (Woocommerce) - PullRequest
0 голосов
/ 28 мая 2020

ОРИГИНАЛЬНЫЙ, ПОЛУРАБОЧИЙ КОД:

add_filter( 'woocommerce_add_to_cart_validation', 'only_four_items_allowed_add_to_cart', 10, 3 );
function only_four_items_allowed_add_to_cart( $passed, $product_id, $quantity ) {
    $cart_count = WC()->cart->get_cart_contents_count();
    $total_count = $cart_count + $quantity;

 if ( has_term( ‘category’, 'product_cat’, $product_id ) && ( $cart_count >= 5 || $total_count > 5 ) ) {
        $passed = false; // Set to false
        $notice = __( "Only 5 category additions allowed per day.", "woocommerce" ); // Notice to display
  }
    if( ! $passed )
        wc_add_notice( $notice, 'error' );

    return $passed;
}

Проблема с приведенным выше кодом заключается в том, что я не могу добавить больше элементов 'product_cat' в корзину, когда ОБЩАЯ сумма корзины составляет 5 или больше. Он должен ограничивать меня только тогда, когда общее количество товаров из КАТЕГОРИИ SPECIFI C составляет 5 или более.

Как мне сделать так, чтобы по существу '$ cart_count' было равно только количеству элементов корзины из указанного c 'product_cat'?

I попробовали следующее, добавив новую переменную $ count, подсчитывая каждый элемент корзины из определенной c категории.


add_filter( 'woocommerce_add_to_cart_validation', 'only_four_items_allowed_add_to_cart', 10, 3 );
function only_four_items_allowed_add_to_cart( $passed, $product_id, $quantity ) {
    $cart_count = WC()->cart->get_cart_contents_count();
    $total_count = $cart_count + $quantity;

        $count = 0; // Initializing

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

 if ( has_term( ‘category’, 'product_cat', $product_id ) && ( $count >= 5 || $total_count > 5 ) ) {
        $passed = false; // Set to false
        $notice = __( "Only 5 category additions allowed per day.", "woocommerce" ); // Notice to display
  }
    if( ! $passed )
        wc_add_notice( $notice, 'error' );

    return $passed;
}

Я думал, что замена '$ cart_count> = 5' новой переменной ' $ count> = 5 'изменит оператор if, чтобы он работал только тогда, когда элементы корзины из указанной c категории равны + = 5.

Однако этого не происходит, и код работает. вообще не работает сейчас. Я могу добавить бесконечное количество товаров в корзину.

В чем может быть проблема?

...