Условно ограничьте 1 товар в корзине из определенной подкатегории товаров
Я нашел этот код, который ограничивает покупку только одним товаром, но мне интересно, можно ли его изменить, чтобы клиент мог купить только один товар из определенной подкатегории.
Код:
add_filter( 'woocommerce_add_cart_item_data', 'woo_custom_add_to_cart' );
function woo_custom_add_to_cart( $cart_item_data ) {
global $woocommerce;
$woocommerce->cart->empty_cart();
return $cart_item_data;
}
Поэтому, если клиент добавит в корзину новый товар из этой конкретной подкатегории товаров, он проверит, есть ли уже в корзине товар из этой подкатегории товаров, и в случае необходимости удалит его, сохранив свежий добавленный товар.
Как я мог бы достичь это?
Спасибо.
1 answers
Обновлено (октябрь 2018)
Крючок woocommerce_add_cart_item_data
используемые в вашем коде и $woocommerce->cart->empty_cart();
, которые полностью очистят все товары в корзине, не подходят для того, что вы просите. Кроме того, этот код какой-то старомодный.
Чтобы получить то, что вам нужно, вместо этого попробуйте этот код (для его работы вам нужно установить свой идентификатор подкатегории):
add_action( 'woocommerce_before_calculate_totals', 'one_subcategory_cart_item', 10, 1 );
function one_subcategory_cart_item( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Set HERE your subcategory (can be an ID, a slug or the name)
$subcategory = 't-shirts';
$count_subcategory = 0;
// First cart loop: Counting number of subactegory items in cart
foreach ( $cart->get_cart() as $cart_item )
if( has_term( $subcategory, 'product_cat', $cart_item['product_id'] ) )
$count_subcategory++;
// Second cart loop: Removing subcategory items if more than one (keeping the last one)
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
if( $count_subcategory > 1 ) {
$cart->remove_cart_item( $cart_item_key );
break;
}
}
}
Этот код протестирован и полностью работоспособен.
Код входит в function.php файл вашей активной дочерней темы (или темы). Или также в любых файлах php плагина.