Aggiungere un pulsante "Checkout" aggiuntivo accanto al pulsante "Aggiungi al carrello" nella pagina prodotto WooCommerce

28 giu 2017, 15:44:41
Visualizzazioni: 27.9K
Voti: 2

Sto cercando di trovare una funzione che aggiunga un pulsante AGGIUNTIVO accanto al pulsante standard "Aggiungi al carrello" nella pagina prodotto di WooCommerce.

  1. Ho aggiunto una cartella woocommerce nel mio tema child per modificare single-product => add-to-cart => simple.php
  2. All'interno di simple.php ho trovato il pulsante standard "Aggiungi al carrello" e dopo di esso è dove voglio aggiungere il mio pulsante "checkout" personalizzato aggiuntivo

Ho trovato questa funzione:

function woo_redirect_to_checkout() {
    $checkout_url = WC()->cart->get_checkout_url();
    return $checkout_url;
}

Che funziona bene MA modifica TUTTI i pulsanti "aggiungi al carrello" nel sito e sto cercando di aggiungerlo SOLO al nuovo pulsante personalizzato che sto cercando di aggiungere (Il nuovo pulsante checkout) Sono riuscito ad aggiungere un pulsante che reindirizza alla pagina di checkout ma non aggiunge l'articolo al carrello prima di andare al checkout

Qualcuno sa come posso aggiungere un NUOVO pulsante + questo pulsante deve non solo andare alla pagina di checkout ma anche attivare l'azione "Aggiungi al carrello" contemporaneamente

Grazie

2
Commenti

Puoi spiegare un po' di più perché hai bisogno di un secondo pulsante di checkout (invece di usare semplicemente quello predefinito)?

Jami Gibbs Jami Gibbs
28 giu 2017 15:48:42

Questa è una richiesta del cliente... Vuole un altro pulsante che reindirizzi direttamente i clienti alla pagina di checkout

gil hamer gil hamer
28 giu 2017 16:26:22
Tutte le risposte alla domanda 2
4
11

Non è necessario modificare i file del template per questo, puoi invece utilizzare l'hook di WooCommerce woocommerce_after_add_to_cart_button. Questo hook aggiungerà contenuto dopo il pulsante "Aggiungi al carrello".

Se il cliente clicca su questo pulsante, il prodotto dovrebbe essere aggiunto al carrello e il cliente dovrebbe essere reindirizzato alla pagina di checkout, giusto?!

Fondamentalmente puoi aggiungere prodotti al carrello con un link come questo:

http://example.com/cart/?add-to-cart=<product ID>

Quindi, utilizzando l'hook menzionato sopra e tenendo a mente questo URL, possiamo aggiungere un secondo pulsante con questo snippet:

function add_content_after_addtocart() {

    // ottieni l'ID del post/prodotto corrente
    $current_product_id = get_the_ID();

    // ottieni il prodotto basato sull'ID
    $product = wc_get_product( $current_product_id );

    // ottieni l'URL della pagina di checkout
    $checkout_url = WC()->cart->get_checkout_url();

    // esegui solo per prodotti semplici
    if( $product->is_type( 'simple' ) ){
        echo '<a href="'.$checkout_url.'?add-to-cart='.$current_product_id.'" class="single_add_to_cart_button button alt">Checkout</a>';
    }
}
add_action( 'woocommerce_after_add_to_cart_button', 'add_content_after_addtocart' );

Questo aggiungerà un pulsante dopo il normale pulsante "Aggiungi al carrello" nelle pagine dei singoli prodotti. Come puoi vedere, ho anche aggiunto un controllo per verificare se il prodotto corrente è un prodotto semplice o meno. Se vuoi usare questo con le varianti, è più complicato. Con questi prodotti devi generare un URL come:

http://example.com/cart/?add-to-cart=123&variation_id=456&attribute_pa_colour=black

Forse devi anche controllare l'opzione predefinita di WooCommerce Abilita AJAX Aggiungi al carrello (WooCommerce > Prodotti > Visualizzazione). Non l'ho testato con questa impostazione.


Aggiornamento per includere la quantità

Se vuoi aggiungere una quantità, puoi anche aggiungere un parametro all'URL del nostro pulsante, in questo modo:

http://example.com/cart/?add-to-cart=<product ID>&quantity=<number of quantity>

Tuttavia, poiché un cliente può modificare la quantità con il campo di input di WooCommerce, abbiamo bisogno di un modo per ottenere il valore corrente di questo campo.

Quindi abbiamo diverse opzioni qui,

  • ascoltare un evento on-change sul campo quantità per aggiornare il nostro URL,

  • oppure aggiungere il valore corrente del campo quantità all'URL solo se il nostro pulsante personalizzato viene cliccato.

Il seguente codice utilizza il secondo approccio, solo quando il pulsante viene cliccato il parametro viene aggiunto.

All'interno della funzione if( $product->is_type( 'simple' ) ), prima dell'echo, inserisci questo script:

<script>
    jQuery(function($) {
    <?php /* se il nostro pulsante personalizzato viene cliccato, aggiungi la stringa "&quantity=" e anche il numero della quantità all'URL */ ?>

        // se il nostro pulsante personalizzato viene cliccato
        $(".custom-checkout-btn").on("click", function() {

            // ottieni il valore dell'attributo "href"
            $(this).attr("href", function() {
                // restituisci il valore "href" + la stringa "&quantity=" + il numero della quantità corrente selezionata
                return this.href + '&quantity=' + $('input.qty').val();
            });

        });
    });
    </script>

Non ho incluso i tag di inizio e fine PHP nel codice sopra! Quindi devi terminare PHP prima del (?>) e riavviarlo dopo lo script (

28 giu 2017 17:47:42
Commenti

Grazie @LWS-Mo Funziona bene e capisco che usare le varianti è molto più complesso perché il prezzo viene impostato in base a ciò che l'utente sta scegliendo. Grazie mille!

gil hamer gil hamer
28 giu 2017 18:08:20

È possibile includere anche la quantità? Al momento funziona solo con prodotti singoli. Grazie

gil hamer gil hamer
28 giu 2017 19:45:25

@gilhamer Ho modificato la risposta e aggiunto del codice jQuery per includere la quantità. Non essendo così semplice, poiché dobbiamo ottenere il valore corrente inserito nel campo quantità, dobbiamo usare JS.

LWS-Mo LWS-Mo
30 giu 2017 15:00:51

Grazie amico (y)

Mohammad Arif Mohammad Arif
27 set 2020 15:30:33
0

Ho deciso di condividere il mio codice, che mi ha aiutato a risolvere il problema di un cliente riguardante la presenza di due pulsanti: uno per il checkout e uno per aggiungere al carrello. Ho utilizzato un approccio diverso che funziona anche con i prodotti variabili.

function wpcoderpro_direct_checkout_button() {
global $product;
$id = $product->get_id();
if( $product->is_type( 'variable' ) ){
    echo '
<script>
jQuery(document).ready(function($){
  $(".redirect_to_checkout").click(function(){
  $("button.single_add_to_cart_button").click();
  window.location.href="/checkout/";
  });
});
</script>
<div class="button alt redirect_to_checkout" style="cursor:pointer;">CHECKOUT</div>
';
}
elseif( $product->is_type( 'simple' ) ){
  echo '
<script>
jQuery(document).ready(function($){
$(".input-text.qty").change(function(){
  $(".redirect_to_checkout a").attr("href", "/checkout/?add-to-cart='. $id .'" + "&quantity= " + $(this).val());
});
});
</script>
<div class="button alt redirect_to_checkout" style="cursor:pointer;"><a href="/checkout/?add-to-cart='. $id .'">CHECKOUT</a></div>
';
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'wpcoderpro_direct_checkout_button', 20 );

Si prega di notare che utilizzo un plugin per l'aggiunta AJAX al carrello per i prodotti variabili, mentre non utilizzo l'aggiunta AJAX al carrello per i prodotti semplici.

Il codice va inserito nel file function.php del tuo child theme. Fammi sapere se hai bisogno di una spiegazione :)

20 ago 2019 22:54:22