Il n'y a pas d'option pour appliquer automatiquement des coupons lorsqu'un certain produit est dans le panier WooCommerce par défaut.
Cependant, il est possible de le faire avec un peu de code personnalisé.
Voici un exemple qui ajoutera une option à vos paramètres de coupons pour sélectionner un produit à lier à ce coupon. Lorsque le produit est ajouté au panier, le coupon est également appliqué.
/**
* Ajouter l'option "Auto-Apply When Product In Cart" aux paramètres des coupons de WooCommerce.
*/
function wcusage1_add_coupon_auto_apply_option($coupon_id, $coupon) {
woocommerce_wp_select(array(
'id' => 'auto_apply_product',
'label' => __('Auto-Apply When Product In Cart', 'woocommerce'),
'description' => __('Sélectionnez un produit pour déclencher l'application automatique du coupon.', '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 ;
}
/**
* Appliquer automatiquement les coupons si un produit correspondant se trouve dans le panier.
*/
function wcusage1_auto_apply_coupon() {
if (is_admin() && !defined('DOING_AJAX')) {
return ;
}
$cart = WC()->cart ;
$cart_product_ids = array() ;
// Récupère tous les ID de produits dans le panier
foreach ($cart->get_cart() as $cart_item) {
$cart_product_ids[] = $cart_item['product_id'] ;
}
// Obtenir tous les coupons avec le jeu de produits à application automatique
$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) ;
// Vérifier si le produit est dans le panier
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') ;
/**
* Supprime le coupon auto-appliqué si le produit correspondant est retiré du panier.
*/
function wcusage1_remove_auto_applied_coupon($cart_item_key) {
$cart = WC()->cart ;
$cart_product_ids = array() ;
// Récupère tous les ID de produits dans le panier
foreach ($cart->get_cart() as $cart_item) {
$cart_product_ids[] = $cart_item['product_id'] ;
}
// Obtenir tous les coupons avec le jeu de produits à application automatique
$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) ;
// Vérifier si le produit est dans le panier
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') ;
Le code peut ne pas être 100% complet ou testé correctement. Veillez à effectuer vos propres tests et à créer des sauvegardes de votre site web avant d'utiliser un code personnalisé.