Buď použiješ plugin ako lamka, alebo si to nakódiš. Lepšie nakódiť, najmä ak pracuješ s multimenou, alebo daňami. Potom ti to nebude blbnúť.
Ako na to?
Pridáme action, ktorú zavesíme na woocommerce_cart_calculate_fees. No a potom si nakódime funkciu, v ktorej pridáme poplatok. Na záver musíme napísať nejaký škaredý javascript, ktorý nám refreshne poplatky pri zmene v košíku. Ten zavesíme na hook woocommerce_checkout_init.
Začneme teda pridaním akcií:
add_action( 'woocommerce_cart_calculate_fees', 'lava_cod_fee', 25 );
add_action( 'woocommerce_checkout_init', 'lava_checkout_refresh' );
Poďme na funkciu. Ukážeme si najjednoduchší príklad s jedným jazykom, jednou menou a rovnaký príplatok na dobierku bez ohľadu na zvolenú krajinu. Dane taktiež ignorujeme.
Samozrejme, kód si môžeme upravovať podľa potreby a zvolenej platobnej metódy, či jazykov.
function lava_cod_fee($cart) {
if(WC()->session->get('chosen_payment_method') == 'cod') {
WC()->cart->add_fee('Príplatok za dobierku', 1);
}
}
function lava_checkout_refresh() {
wc_enqueue_js( "jQuery( function( $ ){
$( 'form.checkout' ).on( 'change', 'input[name^=\"payment_method\"]', function(){
$( 'body' ).trigger( 'update_checkout' );
});
});");
}
Takže je to celkom jednoduché. Tú funkciu lava_checkout_refresh() nerieš. Ber to ako hotovú vec, nič sa v nej nikdy nemení.
Poďme sa pozrieť však na lava_cod_fee() funkciu.
Na riadku číslo 2 porovnávame, či vybraná platobná metóda je ‚cod‚, to je skratka pre Cash on delivery, čiže pre našinca „Dobierka“. V tomto prípade budeme pokračovať v podmienke len vtedy, ak bude spôsob platby vybraná dobierka. ‚cod‚ je Woocommerce štandard. Ďalšie sú ‚bacs‚ – bankový prevod, ‚check‚ – platba šekom (V EU sa takmer nepoužíva. Nie, nie je to poštový poukaz typu U. Je to ten šek, čo ste videli v americkom filme. Nejaký boháč vypíše svojmu podržtaškovi šek, ten s ním zájde do banky a vyplatia mu cash).
Na riadku číslo 3 použijeme metódu add_fee(), tá berie 4 parametre, z toho 2 sú povinné. Prvý parameter je názov príplatku. Druhý je jeho hodnota. Vo vyššie uvedenom prípade sa teda zobrazí „Príplatok za dobierku“ 1€ a to sa aj pripočíta k celkovej sume. Tretím parametrom je, či je príplatok zdaňovaný (true/false, default false) a akú daňovú sadzbu mu má Woo pripočítať. Default je štandardná, čiže ak nezadáš nič, pripočíta sa štandardná sadzba, čo je u nás 20%.
Dane
Pokiaľ chceme, aby sa k nami zadanej sume pripočítala daň, a aby sa poplatok zdaňoval aj všade inde (v pokladni, v e-mailoch, vo faktúre a pod.), jednoducho, tak ako som vyššie uviedol, obohatíme metódu add_fee o posledné dva parametre.
function lava_cod_fee($cart) {
if(WC()->session->get('chosen_payment_method') == 'cod') {
WC()->cart->add_fee('Príplatok za dobierku', 0.83, true, '');
}
}
function lava_checkout_refresh() {
wc_enqueue_js( "jQuery( function( $ ){
$( 'form.checkout' ).on( 'change', 'input[name^=\"payment_method\"]', function(){
$( 'body' ).trigger( 'update_checkout' );
});
});");
}
Zmeny sú vyznačené v editore. Sumu zmeníme na 0.83€, lebo ju budeme násobiť * 1,2 (20% DPH), tretí parameter nastavíme na TRUE, aby sme Woocommercu dali znať, že položku budeme zdaňovať. Štvrtý parameter necháme prázdny, alebo do neho napíšeme string daňovej sadzby. Ak necháme prázdny, jednoducho sa použije štandardná sadzba.
Multimeny
No a ak používame na shope viacero mien, čiže napr. € pre Slovensko a kč pre Česko, jednoducho si náš kód o-if-ujeme.
function lava_cod_fee($cart) {
if(WC()->session->get('chosen_payment_method') == 'cod') {
if(get_current_lang() == 'sk') {
WC()->cart->add_fee( 'Príplatok za dobierku', 0.83, true, '' );
} else {
WC()->cart->add_fee( 'Příplatek za dobírku', 24.79, true, '' );
}
}
}
function lava_checkout_refresh() {
wc_enqueue_js( "jQuery( function( $ ){
$( 'form.checkout' ).on( 'change', 'input[name^=\"payment_method\"]', function(){
$( 'body' ).trigger( 'update_checkout' );
});
});");
}
Pomocou funkcie get_current_lang() == ‚sk‘ definujeme podmienku, že daná add_fee metóda sa aplikuje iba v slovenčine, kde máme nastavené eurá. V opačnom prípade sme v češtine a nastavíme český text aj sumu. Pozor, česi majú DPH vo výške 21%, na rozdiel od nás. My máme 20%.
Zároveň upozorňujem, že funkcia get_current_lang() je funkcia v plugine WPML, ktorý ja používam pri multijazyčných weboch. Pokiaľ používate Polylang, Multipress, alebo iné prekladové pluginy, nebude vám to kvôli tomu fungovať. Takže potom si musíte zistiť v dokumentácií svojho pluginu, ako sa volá funkcia, ktorá vráti aktuálne používaný jazyk (current language).
2 Odpovede
Dobrý deň, je kód na multimeny stále aktuálny? Po použití sa stránka znefunčnila. Používam tiež WPML. Prvý kód na pridanie príplatku v eurách fungoval
Ďakujem
Zdravím Matúš, môže byť, že kvôli nejakým updatom vo Woocommerce aj vo WPML už nie je funkčný. Ideálne, ak by ste poslali screenshot, alebo aspoň znenie chyby.