Créer une règle de code promo WooCommerce pour appliquer une réduction sur le montant restant

Petit nouveau ! | 3 Messages

19 janv. 2025, 13:08

Bonjour à tous,

Je sollicite votre aide après deux jours de recherches infructueuses. Voici la situation : j’aimerais créer un code promo qui offre une réduction de 50 % sur le montant restant d'une commande sur WooCommerce. Par exemple, si j’ai une commande de 100 €, j’applique d’abord un code promo qui offre une réduction de 50 € sur le panier, puis j’aimerais que le code promo suivant, -50 %, ne s’applique que sur le montant restant (c’est-à-dire les 50 € restants).

Malheureusement, WooCommerce ne permet pas de configurer un code promo de cette manière de façon native.

J’ai testé plusieurs plugins, mais aucun n’a fonctionné. J’ai donc posé la question sur le forum WooCommerce, et on m’a expliqué qu’aucun plugin ne permet de réaliser cela, seulement un code PHP personnalisé.

Après des recherches, je suis tombé sur ce post : https://gist.github.com/mikejolley/3969579

Le problème est que je ne maîtrise pas le PHP et je ne suis pas développeur.

Est-ce que quelqu’un pourrait m’aider à adapter ce code ou proposer une solution ? N’hésitez pas à me demander des précisions si nécessaire.

Je vous remercie d’avance et vous souhaite un excellent dimanche.

Cordialement,

Petit nouveau ! | 3 Messages

19 janv. 2025, 17:33

Est-ce que ce code pourrait être intéressant ?
// Apply the coupon '3wcrp' only to the remaining amount after other discounts
add_action('woocommerce_cart_calculate_fees', 'apply_discount_after_previous_coupon', 10, 1);

function apply_discount_after_previous_coupon($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    // Get the applied coupons
    $applied_coupons = $cart->get_applied_coupons();

    // Check if the coupon '3wcrp' is applied
    if (in_array('3wcrp', $applied_coupons)) {
        $total_discounts = 0;

        // Calculate the total discounts applied by other coupons
        foreach ($cart->get_coupons() as $code => $coupon) {
            if ($code !== '3wcrp') { // Exclude '3wcrp' itself
                $discount = $cart->get_coupon_discount_amount($code);
                $total_discounts += $discount;
            }
        }

        // Calculate the remaining subtotal after other discounts
        $subtotal = $cart->get_subtotal();
        $remaining_total = $subtotal - $total_discounts;

        // Ensure the remaining total is valid for applying the discount
        if ($remaining_total > 0) {
            // Calculate 50% of the remaining total
            $percent_discount = $remaining_total * 0.50;

            // Add the discount as a negative fee
            $cart->add_fee('50% Discount (after other coupons)', -$percent_discount);
        }
    }
}
Modifié en dernier par chaoscss le 19 janv. 2025, 17:50, modifié 1 fois.

Petit nouveau ! | 3 Messages

19 janv. 2025, 17:49

ca ne fonctionne pas, si quelqu'un a une idée