Adăugare buton suplimentar "Finalizare comandă" lângă butonul "Adaugă în coș" în pagina de produs WooCommerce
Încerc să găsesc o funcție care să adauge un buton SUPLIMENTAR lângă butonul standard "Adaugă în coș" în pagina de produs WooCommerce.
- Am adăugat un folder woocommerce în tema copil pentru a modifica single-product => add-to-cart => simple.php
- În interiorul fișierului simple.php am găsit butonul standard "Adaugă în coș" și după acesta vreau să adaug butonul meu personalizat de "Finalizare comandă"
Am găsit această funcție:
function woo_redirect_to_checkout() {
$checkout_url = WC()->cart->get_checkout_url();
return $checkout_url;
}
Care funcționează bine DAR modifică TOATE butoanele "adaugă în coș" din site și încerc să o adaug DOAR la noul buton personalizat pe care vreau să-l adaug (Noul buton de finalizare comandă) Am reușit să adaug un buton care redirecționează către pagina de finalizare comandă dar nu adaugă produsul în coș înainte de a merge la finalizarea comenzii
Știe cineva cum pot adăuga un buton NOU + acest buton trebuie nu doar să meargă la pagina de finalizare comandă ci să declanșeze și acțiunea "Adaugă în coș" în același timp
Mulțumesc

Nu este necesar să modifici fișierele template pentru aceasta, în schimb poți folosi hook-ul WooCommerce woocommerce_after_add_to_cart_button
. Acest hook va adăuga conținut după butonul "Adaugă în coș".
Dacă clientul apasă pe acest buton, produsul ar trebui să fie adăugat în coș, iar clientul ar trebui să fie redirecționat către pagina de finalizare comandă, corect?!
În principiu, poți adăuga produse în coș cu un link de genul:
http://example.com/cart/?add-to-cart=<product ID>
Așadar, folosind hook-ul menționat mai sus și ținând cont de acest URL, putem adăuga un al doilea buton cu acest snippet:
function add_content_after_addtocart() {
// obține ID-ul curent al postului/produsului
$current_product_id = get_the_ID();
// obține produsul bazat pe ID
$product = wc_get_product( $current_product_id );
// obține URL-ul paginii de "Finalizare Comandă"
$checkout_url = WC()->cart->get_checkout_url();
// rulează doar pentru produse simple
if( $product->is_type( 'simple' ) ){
echo '<a href="'.$checkout_url.'?add-to-cart='.$current_product_id.'" class="single_add_to_cart_button button alt">Finalizare Comandă</a>';
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'add_content_after_addtocart' );
Acest lucru va adăuga un buton după butonul normal de Adaugă în coș pe paginile de produse individuale. După cum poți vedea, am adăugat și o verificare pentru a vedea dacă produsul curent este un produs simplu sau nu. Dacă dorești să folosești acest lucru cu variații, este mai dificil. Cu aceste produse, trebuie să generezi un URL de genul:
http://example.com/cart/?add-to-cart=123&variation_id=456&attribute_pa_colour=black
Poate că trebuie să verifici și opțiunea implicită WooCommerce Enable AJAX Add to cart
(WooCommerce > Produse > Afișare). Nu am testat cu această setare.
Actualizare pentru a include cantitatea
Dacă dorești să adaugi o cantitate, poți adăuga și un parametru la URL-ul butonului nostru, astfel:
http://example.com/cart/?add-to-cart=<product ID>&quantity=<numărul de bucăți>
Totuși, deoarece un client poate modifica cantitatea cu câmpul de introducere WooCommerce, avem nevoie de o metodă pentru a obține valoarea curentă a acestui câmp.
Așadar, avem mai multe opțiuni aici,
ascultați un eveniment on-change pe câmpul de cantitate pentru a actualiza URL-ul nostru,
sau adăugați valoarea curentă a câmpului de cantitate la URL, doar dacă butonul nostru personalizat este apăsat.
Următorul cod folosește a doua abordare, doar când butonul este apăsat, parametrul este adăugat.
În interiorul funcției if( $product->is_type( 'simple' ) )
, înainte de echo, introduceți acest script:
<script>
jQuery(function($) {
<?php /* dacă butonul nostru personalizat este apăsat, adăugați șirul "&quantity=" și numărul de cantitate la URL */ ?>
// dacă butonul nostru personalizat este apăsat
$(".custom-checkout-btn").on("click", function() {
// obține valoarea atributului "href"
$(this).attr("href", function() {
// returnează valoarea "href" + șirul "&quantity=" + numărul curent de cantitate selectat
return this.href + '&quantity=' + $('input.qty').val();
});
});
});
</script>
Nu am inclus tag-uri de început și sfârșit PHP în codul de mai sus! Așadar, trebuie să termini PHP înainte de (?>) și să-l începi din nou după script (<?php)

Mulțumesc @LWS-Mo Funcționează perfect și înțeleg că utilizarea variației este mult mai complexă deoarece prețul este stabilit în funcție de ceea ce alege utilizatorul. Mulțumesc mult!

Este posibil să includ și cantitatea? Momentan funcționează doar cu un singur produs. Mulțumesc

@gilhamer Am editat răspunsul și am adăugat un cod jQuery pentru a include cantitatea. Deoarece acest lucru nu este atât de ușor, trebuie să obținem valoarea curentă introdusă în câmpul de cantitate, avem nevoie de JS.

Tocmai am venit aici să postez codul meu, care m-a ajutat să rezolv problema clientului meu de a avea două butoane, unul pentru finalizarea comenzii și unul pentru adăugarea în coș. Am folosit o abordare diferită și funcționează și cu produsele variabile.
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;">FINALIZEAZĂ COMANDA</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 .'">FINALIZEAZĂ COMANDA</a></div>
';
}
}
add_action( 'woocommerce_after_add_to_cart_button', 'wpcoderpro_direct_checkout_button', 20 );
Vă rugăm să rețineți că folosesc un plugin pentru Adăugare în coș AJAX pentru produsele variabile și nu folosesc Adăugare în coș AJAX pentru produsele simple.
Codul se adaugă în fișierul function.php al temei child. Spuneți-mi dacă aveți nevoie de explicații :)
