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…

/**
 * 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;
}

1 Comment

  1. Martin on 17.5.2019 at 23:51

    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)

Přidat komentář