Powered by Smartsupp
Webařské tipy

Woo – Doprava zdarma nad 2000,-

Jak nastavit ve WooCommerce dopravu zdarma, i podmíněnou.

Č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.

image

2) Poté, v záložce “Conditions” je třeba specifikovat nové pravidlo, kdy se bude jaká doprava zobrazovat.

image 1

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.

image 2

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 );

Zdroj: https://stackoverflow.com/questions/71692605/set-all-shipping-methods-cost-to-zero-based-on-cart-contents-total-amount-in-woo

Jitka Klingenbergová

Jitka Klingenbergová

Absolventka ČVUT FIT oboru Informatika | Programátorka | Webová vývojářka, konzultantka a mentorka
tvorime@vyladeny-web.cz

Líbil se vám článek? Pošlete ho dál:

Pravidelná dávka užitečných tipů až do schránky