Častý požadavek při stavbě WooCommerce e-shopu je nastavení pravidel pro dopravu, hlavně nějaký její benefit – např. dopravu zdarma od určité částky.
WooCommerce už “něco” umí
Kde: WooCommerce -> Settings (nastavení) -> Shipping (doprava)
Nedávno do WooCommerce přidali novou funkcionalitu k nastavení dopravy, a to je pravidlo pro zobrazení. Např. jde zobrazit další doprava při min. částce v košíku, např. na 2000,- (se slevovými kupony nebo bez). Problém ale je, že při reálném použití se taková doprava jen přidá jako další možnost, když se podmínka splní, tedy tam budou svítí obě dopravy – jak placená, tak ta zdarma.
Použití si dovedu představit pro nějaké větší balíčky, u kterých se předpokládá, že doprava např. nad 15000,- bude vyžadovat použití palety a speciální přepravní služby. Ale na klasické podmínky to není.
Na něco jsou tu pluginy
Např. plugin Conditional Shipping for WooCommerce naplnil očekávání na 100% a použití je jednoduché.
1) Je třeba specifikovat všechny dopravy (jak zdarma, tak placené) v nastavení dopravy, tj. klasickou cestou.
2) Poté, v záložce “Conditions” je třeba specifikovat nové pravidlo, kdy se bude jaká doprava zobrazovat.
3) Pak už jen zbývá nastavit pravidlo jako takové: za jakých podmínek se dopravy zobrazí (na příkladu je do nad 2000) a jaké dopravy se povolí/zakážou zobrazit. A je hotovo.
Varianta bez pluginu
Pokud se chcete vyhnout pluginu, je to také celkem jednoduché. Tady je startovací kód, který si můžete upravit, jak libo (např. upravit dopravu zdarma jen pro jeden typ dopravy, podle kategorie produktu v košíku a podobně).
function filter_woocommerce_package_rates( $rates, $package ) {
// Cart total amount (integer)
$cart_total = WC()->cart->cart_contents_total;
// Greater than or equal to
if ( $cart_total >= 2000 ) {
foreach ( $rates as $rate_key => $rate ) {
// For "free shipping" method (enabled), remove it
if ( $rate->method_id == 'free_shipping' ) {
unset( $rates[$rate_key] );
// For other shipping methods
} else {
// Append rate label titles (free)
$rates[$rate_key]->label .= ' ' . __( '(free)', 'woocommerce' );
// Set rate cost
$rates[$rate_key]->cost = 0;
// Set taxes rate cost (if enabled)
$taxes = array();
foreach ( $rates[$rate_key]->taxes as $key => $tax ) {
if ( $rates[$rate_key]->taxes[$key] > 0 ) {
$taxes[$key] = 0;
}
}
$rates[$rate_key]->taxes = $taxes;
}
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates','filter_woocommerce_package_rates', 10, 2 );