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?
Mise à jour 3: Cela peut être fait de manière très simple avec les 2 fonctions crochues suivantes:
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