Bouton Ajouter au panier supplémentaire redirigeant vers le paiement sur la boucle WooCommerce

Aug 18 2020

J'ai besoin d'un bouton sur l'archive WooCommerce qui ajoute le produit au panier et qui redirige le client vers la caisse. Je l'appelle "Achat et paiement".

Je m'accroche à l'archive en utilisant l' woocommerce_after_shop_loop_itemaction et j'ai défini l' global $product;argument.

J'obtiens ensuite l'ID du produit et je définis ensuite l'url d'ajout au panier ( atc_urlargument). Le problème est que lorsque vous cliquez sur Ajouter au panier, le produit n'est pas ajouté.

C'est mon code jusqu'à présent et je ne suis pas vraiment sûr de ce qui ne va pas ici.

add_action( 'woocommerce_after_shop_loop_item', 'buy_checkout_on_archive', 20 );
function buy_checkout_on_archive(){

    global $product;

    $pid = $product->get_id();

    $atc_url = wc_get_checkout_url().'?add-to-cart='.$pid;

    $button_class = 'loop-checkout-btn'; $button_text = __('Buy & Checkout', 'woocommerce');

        if ($product->is_type('simple')){ echo '<a href="'.$atc_url.'" class="'.$button_class.'">'.$button_text.'</a>';
    }
}

Réponses

LoicTheAztec Aug 18 2020 at 17:57

Ce qui suit fera l'affaire, en ajoutant un bouton personnalisé Ajouter au panier sur les archives WooCommerce qui redirige vers la caisse après avoir ajouté le produit au panier:

add_action( 'woocommerce_after_shop_loop_item', 'buy_checkout_on_archive', 20 );
function buy_checkout_on_archive(){
    global $product; if ( $product->is_type('simple') ){
        $product_id = $product->get_id();
        $button_url = '?addtocart='.$product_id;
        $button_class = 'button loop-checkout-btn'; $button_text  = __('Buy &amp; Checkout', 'woocommerce');

        echo '<a href="'.$button_url.'" class="'.$button_class.'">'.$button_text.'</a>'; } } add_action( 'template_redirect', 'addtocart_on_archives_redirect_checkout' ); function addtocart_on_archives_redirect_checkout(){ if( isset( $_GET['addtocart'] ) && $_GET['addtocart'] > 0 ) { WC()->cart->add_to_cart( intval($_GET['addtocart']) );

        // Checkout redirection
        wp_safe_redirect( wc_get_checkout_url() );
        exit;
    }
}

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