У меня есть код для автоматического добавления продукта (депозита) в корзину клиента, независимо от того, какой продукт он выбрал - с кодом ниже внутри functions.php. Это прекрасно работает.
Но как теперь расширить код, чтобы этот товар автоматически добавлялся в корзину только тогда, когда покупатель выбрал товар из определенной товарной категории? Например. депозит не должен быть добавлен в корзину, когда клиент покупает подарочную карту.
Большое спасибо!
/**
* Automatically adds product to cart on visit
*/
add_action( 'template_redirect', 'add_product_to_cart' );
function add_product_to_cart() {
if ( ! is_admin() ) {
$product_id = 1267; //product added automatically
$found = false;
//check if product already in cart
if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->get_id() == $product_id )
$found = true;
}
// if product not found, add it
if ( ! $found )
WC()->cart->add_to_cart( $product_id );
} else {
}
}
}
Вам придется использовать условную функцию Wordpress hast_term()
совершенно по-другому.
Следующий код автоматически добавит в корзину предварительно определенный продукт, если продукт из категории продуктов уже находится в корзине:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_item_based_on_product_category', 10, 1 );
function auto_add_item_based_on_product_category( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$required_categories = array('t-shirts'); // Required product category(ies)
$added_product_id = 1267; // Specific product to be added automatically
$matched_category = false;
// Loop through cart items
foreach ( $cart->get_cart() as $item_key => $item ) {
// Check for product category
if ( has_term( $required_categories, 'product_cat', $item['product_id'] ) ) {
$matched_category = true;
}
// Check if specific product is already auto added
if ( $item['data']->get_id() == $added_product_id ) {
$saved_item_key = $item_key; // keep cart item key
}
}
// If specific product is already auto added but without items from product category
if ( isset($saved_item_key) && ! $matched_category ) {
$cart->remove_cart_item( $saved_item_key ); // Remove specific product
}
// If there is an item from defined product category and specific product is not in cart
elseif ( ! isset($saved_item_key) && $matched_category ) {
$cart->add_to_cart( $added_product_id ); // Add specific product
}
}
Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.