web-dev-qa-db-fra.com

OBTENEZ un code promo via URL et appliquez-le sur la page de paiement WooCommerce

J'ai un site Web WooCommerce et lorsque le client ajoute au panier un produit, il est redirigé vers la page de paiement, la page du panier n'est donc pas accessible.

Je souhaite appliquer le coupon via l'URL (GET) sur la page de paiement, avec quelque chose comme https://example.com/?coupon_code=highfive.

Lorsque le client clique sur cette URL, le code de coupon est stocké dans les sessions du navigateur. Ensuite, s'il ajoute au panier un produit, le coupon est appliqué sur la page de paiement.

Est-ce possible?

8
developerme

Mise à jour 3: Cela peut être fait de manière très simple avec les 2 fonctions crochues suivantes:

  • Le premier récupérera le code de coupon dans l'URL et le définira dans WC_Sessions.
  • Le second appliquera le code promo de la session dans la page de paiement.

Voici ce code:

add_action('init', 'get_custom_coupon_code_to_session');
function get_custom_coupon_code_to_session(){
    if( isset($_GET['coupon_code']) ){
        // Ensure that customer session is started
        if( !WC()->session->has_session() )
            WC()->session->set_customer_session_cookie(true);

        // Check and register coupon code in a custom session variable
        $coupon_code = WC()->session->get('coupon_code');
        if(empty($coupon_code)){
            $coupon_code = esc_attr( $_GET['coupon_code'] );
            WC()->session->set( 'coupon_code', $coupon_code ); // Set the coupon code in session
        }
    }
}

add_action( 'woocommerce_before_checkout_form', 'add_discout_to_checkout', 10, 0 );
function add_discout_to_checkout( ) {
    // Set coupon code
    $coupon_code = WC()->session->get('coupon_code');
    if ( ! empty( $coupon_code ) && ! WC()->cart->has_discount( $coupon_code ) ){
        WC()->cart->add_discount( $coupon_code ); // apply the coupon discount
        WC()->session->__unset('coupon_code'); // remove coupon code from session
    }
}

Le code va dans le fichier function.php du thème enfant actif (ou thème actif). Testé et fonctionne

Inspiré de ce code de réponse, Lukasz Wiktor a publié un plugin: Woo Coupon URL

13
LoicTheAztec