Por defecto no existe la opción de autoaplicar cupones cuando un determinado producto está en el carrito de WooCommerce.
Sin embargo, es posible hacerlo con algo de código personalizado.
Aquí tienes un ejemplo que añadirá una opción a la configuración de tus cupones para seleccionar un producto y vincularlo a ese cupón. Cuando el producto se añada al carrito, también se aplicará el cupón.
/**
* Añade la opción "Aplicar automáticamente cuando el producto esté en la cesta" a la configuración de cupones de WooCommerce.
*/
function wcusage1_add_coupon_auto_apply_option($coupon_id, $coupon) {
woocommerce_wp_select(array(
'id' => 'auto_apply_product',
'label' => __('Aplicar automáticamente cuando el producto esté en la cesta', 'woocommerce'),
'description' => __('Selecciona un producto para activar la aplicación automática del cupón.', 'woocommerce'),
'desc_tip' => true,
'options' => wcusage1_get_product_dropdown_options(),
'value' => get_post_meta($coupon_id, 'auto_apply_product', true),
));
?>
'publish',
'limit' => -1,
'return' => 'objects',
));
$options = array('' => __('None', 'woocommerce'));
foreach ($products as $product) {
$options[$product->get_id()] = $product->get_name();
}
return $options;
}
/**
* Aplicar cupones automáticamente si hay un producto coincidente en el carrito.
*/
function wcusage1_auto_apply_coupon() {
if (is_admin() && !defined('DOING_AJAX')) {
return;
}
$cart = WC()->cart;
$cart_product_ids = array();
// Obtener todos los IDs de productos del carrito
foreach ($cart->get_cart() as $cart_item) {
$cart_product_ids[] = $cart_item['product_id'];
}
// Obtener todos los cupones con el producto de aplicación automática establecido
$args = array(
'post_type' => 'shop_coupon',
'post_status' => 'publish',
'posts_per_page' => -1,
);
$coupons = get_posts($args);
foreach ($coupons as $coupon) {
$coupon_code = $coupon->post_title;
$auto_apply_product = get_post_meta($coupon->ID, 'auto_apply_product', true);
// Comprobar si el producto está en el carrito
if ($auto_apply_product && in_array($auto_apply_product, $cart_product_ids)) {
if (!$cart->has_discount($coupon_code)) {
$cart->apply_coupon($coupon_code);
}
}
}
}
add_action('woocommerce_before_calculate_totals', 'wcusage1_auto_apply_coupon');
/**
* Eliminar el cupón aplicado automáticamente si el producto correspondiente se elimina del carrito.
*/
function wcusage1_remove_auto_applied_coupon($cart_item_key) {
$cart = WC()->cart;
$cart_product_ids = array();
// Obtener todos los IDs de productos del carrito
foreach ($cart->get_cart() as $cart_item) {
$cart_product_ids[] = $cart_item['product_id'];
}
// Obtener todos los cupones con el producto de aplicación automática establecido
$args = array(
'post_type' => 'shop_coupon',
'post_status' => 'publish',
'posts_per_page' => -1,
);
$coupons = get_posts($args);
foreach ($coupons as $coupon) {
$coupon_code = $coupon->post_title;
$auto_apply_product = get_post_meta($coupon->ID, 'auto_apply_product', true);
// Comprobar si el producto está en el carrito
if ($auto_apply_product && !in_array($auto_apply_product, $cart_product_ids)) {
if ($cart->has_discount($coupon_code)) {
$cart->remove_coupon($coupon_code);
}
}
}
}
add_action('woocommerce_cart_item_removed', 'wcusage1_remove_auto_applied_coupon');
El código puede no estar 100% completo o probado correctamente. Por favor, asegúrese de hacer sus propias pruebas y crear copias de seguridad del sitio web antes de usar el código personalizado.