Après une longue recherche, je n'ai pas été en mesure de trouver un code approprié pour appliquer un coupon à des éléments de campagne de panier. Disons que le client a ajouté une quantité de produit de 10, mon coupon sélectionné doit être appliqué pour ce produit. S'il ajoute un autre produit avec une quantité supérieure à 10, le même coupon doit être appliqué pour ce produit. Une aide ici? J'ai pu trouver quelque chose de similaire mais cela ne fonctionne que pour des produits spécifiques, une assistance comment mettre à jour ce code pour parcourir chaque panier de produits, vérifier leurs quantités et appliquer un coupon pour les produits dont la quantité est de 10 ou plus?

Référence pour un code similaire mais uniquement pour des produits spécifiques:
Appliquer sous condition automatiquement des coupons pour des ID de produit spécifiques et quantités

Exemple d'image:

Image example attached  here

-1
Krikislt - We make IT happen 28 févr. 2021 à 21:50

1 réponse

Meilleure réponse

Essayé de créer une solution personnalisée pour ma question ci-dessous. Et je l'ai fait d'une manière ou d'une autre, je ne sais pas si c'est une bonne option, mais cela fonctionne au moins pour moi comme j'ai exactement besoin. Cela crée un coupon distinct pour chaque produit dans une boutique (si un nouveau produit est ajouté, il crée également un coupon unique pour celui-ci). Les coupons sont appliqués automatiquement par élément de campagne du panier, si la quantité de produit est de 10 ou plus dans un panier. Cela donne une réduction de 10% pour ce produit. Code comme ci-dessous, peut-être que pour quelqu'un sera utile car je n'ai pas trouvé de plugins ou de codes pour fonctionner comme ça n'importe où ...

$args = array(
    'posts_per_page'   => -1,
    'orderby'          => 'title',
    'order'            => 'asc',
    'post_type'        => 'shop_coupon',
    'post_status'      => 'publish',
);
    
$all_coupons = get_posts( $args );

// Loop through the available coupons
foreach ( $all_coupons as $coupon ) {
    // Get the name for each coupon and add to the previously created array
    $coupon_name = $coupon->post_title;
}

foreach ($all_coupons as $coupon) {
    $coupons_array[] = $coupon->post_title;
}

$all_ids = get_posts( array(
        'post_type' => 'product',
        'numberposts' => -1,
        'post_status' => 'publish',
        'fields' => 'ids',
   ) );

   foreach ( $all_ids as $id ) {
       $product_id_array[] = $id;
    }

// Get values from arr2 and arr1 unique
 $output = array_merge(array_diff($coupons_array, $product_id_array), array_diff($product_id_array, $coupons_array));
    
function coupon_exists($coupon_code) {
    global $wpdb;
        $sql = $wpdb->prepare( "SELECT post_name FROM $wpdb->posts WHERE post_type = 'shop_coupon' AND post_name = '%s'", $coupon_code );
        $coupon_codes = $wpdb->get_results($sql);
        if (count($coupon_codes)> 0) {
            return true;
        }
    else {
            return false;
        }
    }

    foreach ($output as $o) {
        if (is_numeric($o)) {
            if (!coupon_exists($o)) {
                generate_coupon($o);
            }
        }
}

function generate_coupon($coupon_code){
                $coupon = new WC_Coupon();
                $coupon->set_code($coupon_code);
                //the coupon discount type can be 'fixed_cart', 'percent' or 'fixed_product', defaults to 'fixed_cart'
                $coupon->set_discount_type('percent_product');
                //the discount amount, defaults to zero
                $coupon->set_amount(10);
                $coupon->set_individual_use(false);
                 $coupon->set_product_ids(array($coupon_code));
                //save the coupon
                $coupon->save();
                return $coupon_code;
}


add_action( 'woocommerce_before_cart', 'conditional_auto_add_coupons' );
function conditional_auto_add_coupons() {

       $all_ids = get_posts( array(
        'post_type' => 'product',
        'numberposts' => -1,
        'post_status' => 'publish',
        'fields' => 'ids',
       ) );

    if ( !WC()->cart->is_empty() ){


        // First cart loop: Counting number of subactegory items in cart
        foreach ( $all_ids as $id ){
        foreach ( WC()->cart->get_cart() as $cart_item ){
                if( $id == $cart_item['data']->id ){
                    if( 10 <= $cart_item['quantity']  ){
                        WC()->cart->add_discount( $id );
                        //wc_add_notice( __( 'Discount of <strong>10%</strong> for quantity.', 'theme_domain' ), 'success' );
                    }else{
                         WC()->cart->remove_coupon( $id );
                         //wc_add_notice( __( 'Discount of <strong>10%</strong> due to low quantity removed.', 'theme_domain' ), 'success' );}
                }
            }
        }
    }
}
}
0
Krikislt - We make IT happen 7 mars 2021 à 14:38