php - promo - woocommerce discount



Comment puis-je appliquer un coupon par programmation dans Woocommerce? (2)

J'ai utilisé cette solution, mais elle contient un bogue lorsque l'OP l'a écrit. Si l'utilisateur ignore la prévisualisation du panier et passe directement au formulaire de commande, il n'applique pas le coupon. Voici ma solution.

// Independence day 2013 coupon auto add
// Add coupon when user views cart before checkout (shipping calculation page).
add_action('woocommerce_before_cart_table', 'add_independence_day_2013_coupon_automatically');

// Add coupon when user views checkout page (would not be added otherwise, unless user views cart first).
add_action('woocommerce_before_checkout_form', 'add_independence_day_2013_coupon_automatically');

// Check if php function exists.  If it doesn't, create it.
if (!function_exists('add_independence_day_2013_coupon_automatically')) {

    function add_independence_day_2013_coupon_automatically() {

        global $woocommerce;
        $coupon_code = 'independencedaysale';
        $bc_coupon_start_date = '2013-06-30 17:00:00';
        $bc_coupon_end_date = '2013-07-08 06:59:59';

        // Only apply coupon between 12:00am on 7/1/2013 and 11:59pm on 7/7/2013 PST.
        if ((time() >= strtotime($bc_coupon_start_date)) &&
            (time() <= strtotime($bc_coupon_end_date))) {

            // If coupon has been already been added remove it.
            if ($woocommerce->cart->has_discount(sanitize_text_field($coupon_code))) {

                if (!$woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {

                    $woocommerce->show_messages();

                }

            }

            // Add coupon
            if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {

                $woocommerce->show_messages();

            } else {

                $woocommerce->clear_messages();
                $woocommerce->add_message('Independence day sale coupon (10%) automatically applied');
                $woocommerce->show_messages();

            }

            // Manually recalculate totals.  If you do not do this, a refresh is required before user will see updated totals when discount is removed.
            $woocommerce->cart->calculate_totals();

        } else {

            // Coupon is no longer valid, based on date.  Remove it.
            if ($woocommerce->cart->has_discount(sanitize_text_field($coupon_code))) {

                if ($woocommerce->cart->remove_coupons(sanitize_text_field($coupon_code))) {

                    $woocommerce->show_messages();

                }

                // Manually recalculate totals.  If you do not do this, a refresh is required before user will see updated totals when discount is removed.
                $woocommerce->cart->calculate_totals();

            }

        }

    }

}

https://src-bin.com

En Woocommerce, j'essaie de trouver un moyen d'appliquer une réduction de 10% sur la commande de tout un client si le poids dans le panier dépasse 100 livres. Je suis en partie pour y parvenir. Pour la prochaine étape, je cherche un moyen d'appliquer par programmation un code de coupon via action / hook via functions.php.

Il semble que je puisse utiliser la fonction woocommerce_ajax_apply_coupon pour cela ( http://docs.woothemes.com/wc-apidocs/function-woocommerce_ajax_apply_coupon.html ) mais je ne suis pas sûr de savoir comment l'utiliser.

Jusqu'à présent, j'ai modifié cart.php pour obtenir le poids total de tous les produits du panier, j'ai créé un coupon qui applique la remise (si saisie manuellement) et j'ai ajouté du code à functions.php pour vérifier le poids et afficher un message à l'utilisateur.

EDIT: Code partiel supprimé, code complété inclus dans la solution ci-dessous.

Merci pour les conseils Freney. Voici le résultat final de travail qui applique avec succès le coupon de remise lorsque la condition est remplie et le supprime également lorsqu'il n'est plus satisfait:

/* Mod: 10% Discount for weight greater than 100 lbs 
Works with code added to child theme: woocommerce/cart/cart.php lines 13 - 14: which gets $total_weight of cart:
        global $total_weight;
        $total_weight = $woocommerce->cart->cart_contents_weight;
*/
add_action('woocommerce_before_cart_table', 'discount_when_weight_greater_than_100');
function discount_when_weight_greater_than_100( ) {
    global $woocommerce;
    global $total_weight;
    if( $total_weight > 100 ) {
        $coupon_code = '999';
        if (!$woocommerce->cart->add_discount( sanitize_text_field( $coupon_code ))) {
            $woocommerce->show_messages();
        }
        echo '<div class="woocommerce_message"><strong>Your order is over 100 lbs so a 10% Discount has been Applied!</strong> Your total order weight is <strong>' . $total_weight . '</strong> lbs.</div>';
    }
}

/* Mod: Remove 10% Discount for weight less than or equal to 100 lbs */
add_action('woocommerce_before_cart_table', 'remove_coupon_if_weight_100_or_less');
function remove_coupon_if_weight_100_or_less( ) {
    global $woocommerce;
    global $total_weight;
    if( $total_weight <= 100 ) {
        $coupon_code = '999';
        $woocommerce->cart->get_applied_coupons();
        if (!$woocommerce->cart->remove_coupons( sanitize_text_field( $coupon_code ))) {
            $woocommerce->show_messages();
        }
        $woocommerce->cart->calculate_totals();
    }
}

Answer #1

Je crois que cette extension peut faire ce que vous voulez: https://awodev.com/products/wordpress/awocoupon

J'ai eu une application similaire et j'ai contacté le développeur et ils ont ajouté la fonctionnalité que je cherchais en quelques heures. Très sympathique et je recommande fortement l'achat auprès de ce développeur!