Redirection vers checkout sans ajout supplémentaire de produit si le produit est déjà dans le panier

Permet de ne pas multiplier la présence du produit dans le panier. (dans le cas où une personne sort du checkout, puis y revient en cliquant un ‘add to cart’)

A mettre dans function.php

function my_validation_handler( $passed, $product_id, $quantity, $variation_id = null, $variations = null ) {
    // Get checkout url
    $checkout_url = wc_get_checkout_url();

    // Set variable
    $in_cart = false;

    // Loop
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if ( $cart_item['data']->get_id() == $product_id ) {
            $in_cart = true;
            break;
        }
    }

    // True
    if ( $in_cart ) {
        wp_safe_redirect( $checkout_url );
        exit();
    } else {
        // Add product to cart
        WC()->cart->add_to_cart( $product_id, $quantity );
        wp_safe_redirect( $checkout_url );
        exit();
    }

    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'my_validation_handler', 10, 5 );

Typiquement : Cothurnes -> abonnement ‘artistes’. Si va pas au bout du checkout, pas moyen de revenir au panier sans cliquer sur s’inscrire… donc théoriquement ajout supplémentaire du produit.

Sources:

https://stackoverflow.com/questions/61652130/check-if-item-is-already-in-cart-if-yes-then-redirect-user-to-checkout-without