Я не представляю, как проверить, есть ли в корзине какие-то продукты или нет. Мне просто нужно разрешить один продукт для проверки.
Вот код, используемый в class-wc-cart.php для предотвращения добавления товаров, если ОДИН ЖЕ продукт уже есть в корзине, и я уверен, что он должен быть довольно похожим, но мне не хватает некоторых переменных WP, чтобы определить любые вид продукта.
Я пробовал также с этот код, но это не работает в functions.php (нет, я не использую дочерние темы).
if ( $product_data->is_sold_individually() ) {
$in_cart_quantity = $cart_item_key ? $this->cart_contents[ $cart_item_key ]['quantity'] : 0;
// If it's greater than 0, it's already in the cart
if ( $in_cart_quantity > 0 ) {
wc_add_notice( sprintf(
'<a href="%s" class="button wc-forward">%s</a> %s',
$this->get_cart_url(),
__( 'View Cart', 'woocommerce' ),
sprintf( __( 'You cannot add another "%s" to your cart.', 'woocommerce' ), $product_data->get_title() )
), 'error' );
return false;
}
}
Спасибо.
Не вносите изменения непосредственно в основной файл woocommerce, потому что при обновлении плагина ваш код может потеряться.
Добавьте следующий код в functions.php, и он добавит только один продукт в корзину:
add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_cart_item_data_custom' );
function woocommerce_add_cart_item_data_custom( $cart_item_data ) {
global $woocommerce;
if($woocommerce->cart->cart_contents_count > 0){
wc_add_notice(
__( 'You cannot add another product to your cart.', 'woocommerce' ));
return false;
}
}
Там является фильтр / хук, который запускается до того, как товар добавлен в корзину, поскольку каждый товар проходит проверку перед его добавлением.
Поэтому при проверке товара мы можем проверить, есть ли товар, если в корзине уже есть товары, и очистить его (если текущий товар можно добавить) и добавить сообщение об ошибке.
/**
* When an item is added to the cart, remove other products
*/
function so_27030769_maybe_empty_cart( $valid, $product_id, $quantity ) {
if( ! empty ( WC()->cart->get_cart() ) && $valid ){
WC()->cart->empty_cart();
wc_add_notice( 'Whoa hold up. You can only have 1 item in your cart', 'error' );
}
return $valid;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_27030769_maybe_empty_cart', 10, 3 );