WooCommerce - Cum să adaugi un câmp personalizat pentru costul de transport în coșul de cumpărături și totaluri
Folosesc plugin-ul WooCommerce și am următoarea întrebare:
În pagina produsului individual, am un produs unde, în funcție de anumite selecții făcute de cumpărător, se calculează o valoare pentru costul de transport, pe care trebuie să o transmit/includ ca parte a produselor din coș într-o coloană nouă numită "Cost Transport" atunci când vizualizezi coșul.
Problema este că, cumpărătorul poate decide să cumpere trei produse diferite, unde fiecare dintre aceste trei produse ar putea avea calcule diferite pentru costul de transport, după ce apasă butonul "Adaugă în coș" de trei ori.
De exemplu:
Selecțiile Produsului A calculează un Cost de Transport de 2.00 lei
Selecțiile Produsului B calculează un Cost de Transport de 4.00 lei
Selecțiile Produsului C calculează un Cost de Transport de 6.00 lei
Așadar, bazat pe exemplul de mai sus, când cumpărătorul a terminat cumpărăturile și apasă "Vezi Coșul", vreau să vadă:
Produs Preț Cost Transport Cantitate Total
---------------------------------------------------------------------------------------
Produs A 10 lei 2 lei 1 10 lei
Produs B 5 lei 4 lei 1 5 lei
Produs C 15 lei 6 lei 1 15 lei
Această coloană "Cost Transport" este câmpul personalizat pe care vreau să-l adaug în coș, lucru de care nu sunt sigur cum să-l realizez.
În plus față de cele de mai sus, vreau să adaug și la "Totaluri Coș" de mai jos, un alt câmp personalizat pentru "Cost Transport" care ar totaliza 12 lei, care ar fi apoi adăugat la Totalul General al Produselor, adică:
Totaluri Coș
Subtotal Coș 30 lei
Cost Transport 12 lei
Total Comandă 42 lei
O parte din codul pe care l-am folosit pentru costul de transport în Totalul Coșului este:
function woo_add_cart_fee() {
global $woocommerce;
$woocommerce->cart->add_fee( __('Cost Transport', 'woocommerce'), 100 );
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Deci, trebuie să știu cum să adaug "Cost Transport" atât la Detaliile Produselor din Coș cât și la Totalurile Coșului.
Orice ajutor legat de cod ar fi foarte apreciat.
Mulțumesc.

Mai întâi, stocați câmpul personalizat atunci când editați produsul. Să presupunem că folosiți câmpul personalizat custom_shipping_cost. Asigurați-vă că este stocat ca număr, de exemplu 20, NU $20.00.
Apoi, trebuie să afișați acest câmp pe pagina coșului. Din păcate, nu există un filtru pentru a adăuga o coloană nouă în tabelul coșului, așa că trebuie să editați fișierul template, sau dacă nu este necesar să fie o coloană, puteți face acest lucru în schimb, acest cod va adăuga valoarea suplimentară la ultima coloană:
add_filter('woocommerce_cart_item_subtotal','additional_shipping_cost',10,3);
function additional_shipping_cost($subtotal, $values, $cart_item_key) {
//Obține valoarea câmpului personalizat
$custom_shipping_cost = get_post_meta($post->ID, 'custom_shipping_cost', true);
//Doar pentru testare, puteți elimina această linie
$custom_shipping_cost = 10;
//Verifică dacă avem un cost suplimentar de livrare, dacă da, îl afișează sub prețul articolului
if ($custom_shipping_cost) {
return $subtotal.'<br>+'.woocommerce_price($custom_shipping_cost).' Cost Livrare';
} else {
return $subtotal;
}
}
Cu aceasta, prima parte a întrebării este rezolvată. Dacă doriți să o afișați ca în exemplul de mai sus, trebuie să duplicați fișierul plugins/woocommerce/templates/cart/cart.php în themes/yourtheme/woocommerce/cart/cart.php. Apoi editați fișierul, adăugați propria coloană și puteți folosi codul de mai sus pentru a afișa prețul.
După aceea, trebuie să actualizăm totalurile coșului cu costurile suplimentare. Codul dumneavoastră cu add_fee este util:
function woo_add_cart_fee() {
global $woocommerce;
$extra_shipping_cost = 0;
//Parcurge coșul pentru a identifica costurile suplimentare
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
//Obține informațiile despre produs
$_product = $values['data'];
//Obține valoarea câmpului personalizat
$custom_shipping_cost = get_post_meta($_product->id, 'custom_shipping_cost', true);
//Doar pentru testare, puteți elimina această linie
$custom_shipping_cost = 10;
//Adună costurile suplimentare
$extra_shipping_cost = $extra_shipping_cost + $custom_shipping_cost;
}
//Verifică dacă avem de fapt un cost suplimentar, apoi îl adaugă
if ($extra_shipping_cost) {
$woocommerce->cart->add_fee( __('Cost Livrare', 'woocommerce'), $extra_shipping_cost );
}
}
add_action( 'woocommerce_before_calculate_totals', 'woo_add_cart_fee');
Gata, ar trebui să funcționeze după aceasta. Asigurați-vă că eliminați liniile "Doar pentru testare..." din ambele coduri, nu am creat câmpul personalizat pe site-ul meu pentru testare.
