WooCommerce – doprava zdarma od určité částky
Poměrně častý požadavkem na úpravu WooCommerce je poštovné od určité částky zdarma. Existují na to samozřejmě pluginy, ať už zdarma nebo placené, ale leckdy neumožňují přesně to, co klient potřebuje.
Zadání od klienta znělo
[dropcap style=a color=#222222]Potřebuji dopravu zdarma nad částku 900,- Kč, to ale neplatí pro Balík do ruky, který je vždy za původní částku.[/dropcap]
Pro takovou úpravu stačí znát správný filtr, v tomto případě woocommerce_pakage_rates, kterým je možné upravovat / přidávat / odebírat metody doručení. Stačí tedy zkontrolovat celkovou částku, pokud převyšuje limit, pro všechny metody doručení nastavit cenu 0 v případě, že se nejedná o metodu Balík do ruky.
Jednoduché, elegantní a plně upgrade-safe…
[php]
/**
* Set free shipping if the items cost is more than defined amount
*/
add_filter( ‘woocommerce_package_rates’, ‘wp_programator_change_flat_rates_cost’, 10, 2 );
function wp_programator_change_flat_rates_cost( $rates, $package ) {
// Uncomment the line bellow to see the rates array
// die(var_dump($rates));
// Check the total value of items in cart
if (WC()->cart->cart_contents_total > 900) {
foreach ($rates as $key => $rate) {
// set price to zero if the shipping is not Balík do ruky
if ($key != ‘flat_rate:8’) {
$rates[$key]->cost = 0;
}
}
}
return $rates;
}
[/php]
Václav Greif se programování pro Wordpress věnuje více než 16 let. Za tu dobu nasbíral mnoho zkušeností s tvorbou pluginů pro Wordpress, úpravou šablon a programováním komplexních funkcionalit. Věnuje se programování pro Wordpress a školení programátorů.
Dobrý den,
zajímavé a jednoduché řešení.
Ale poněkud mi nefunguje v případě více měn. Protože jinou hodnotu čísla je potřeba pro CZK a jinou pro Euro (Slovensko), kde je poměr 26:1. Je jasné, že doprava zdarma od 900 CZK je jiná hodnota než 900 EURO.
Jak tohle zohlednit ? (mám WMPL)