WooCommerce - Cum să adaugi un câmp personalizat pentru costul de transport în coșul de cumpărături și totaluri

26 ian. 2014, 06:42:13
Vizualizări: 26.5K
Voturi: 7

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.

7
Comentarii

Ce cod ai încercat până acum?

Brad Dalton Brad Dalton
26 ian. 2014 06:50:25

Bună, am actualizat postarea mea mai sus, dar am hardcodat 100, ceea ce nu este ceea ce vreau, ci vreau să fie calculat.

tonyf tonyf
26 ian. 2014 07:24:40

Aceasta nu este o întrebare despre WordPress, ci despre WooCommerce. Ar fi mai bine să o adresezi în canalele de suport ale plugin-ului, deoarece astfel de întrebări sunt în general off-topic aici.

Mark Kaplun Mark Kaplun
26 ian. 2014 07:25:37

Ciudat, pentru că am văzut multe întrebări pe acest forum cu eticheta WooCommerce.

tonyf tonyf
26 ian. 2014 07:27:04

da, iar rata de răspunsuri utile nu este mult peste zero.

Mark Kaplun Mark Kaplun
26 ian. 2014 11:09:21

Deci, Mark Kaplun, ești capabil să mă ajuți, te rog, cu întrebările mele - aș aprecia foarte mult.

tonyf tonyf
26 ian. 2014 12:45:57

crede-mă că dacă aș ști răspunsul, aș face-o

Mark Kaplun Mark Kaplun
26 ian. 2014 16:35:44
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 1
2

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.

26 ian. 2014 14:06:31
Comentarii

Salut passatgt - Apreciez foarte mult ajutorul și exemplul excelent cu explicația. Voi încerca ce ai sugerat și dacă e în regulă, pot să revin la tine cu orice problemă.

tonyf tonyf
26 ian. 2014 14:26:01

Dacă e legat de întrebarea inițială, sigur :)

passatgt passatgt
26 ian. 2014 14:34:11