Gyakran előforduló probléma WooCommerce webshopoknál, hogy x összeg fölött hozzáadunk egy ‘Ingyenes szállítás’ opciót, de a vevő még mindig ki tudja választani a fizetős szállítási módokat is. Ez vezethet tévesen feladott vásárlásokhoz, értetlenül álló vevőkhöz.

Emiatt célszerű elrejteni ezt a lehetőséget. Erre szolgál a következő kódrészlet (WooCommerce 2.6+ verzióra):

/**
 * Más szállítási módok elrejtése ha ingyenes szállítás elérhető.
 *
 * @param array $rates Elérhető szállítási módokat tartalmazó tömb.
 * @return array
 */
function ov_hide_shipping_when_free_is_available( $rates ) {
	$free = array();
	foreach ( $rates as $rate_id => $rate ) {
		if ( 'free_shipping' === $rate->method_id ) {
			$free[ $rate_id ] = $rate;
			break;
		}
	}
	return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'ov_hide_shipping_when_free_is_available', 100 );

Ahhoz, hogy ez a kód működjön, törölni kell a WooCommerce tranzienseket: Admin felület -> WooCommerce -> Állapot -> Eszközök -> WooCommerce tranziensek -> Tranziensek törlése

Hol kell hozzáadni ezt a kódot?

A használt sablonban a functions.php fájl végére érdemes beszúrni a kódrészletet, vagy egy új plugint létrehozni, és abba beilleszteni. Ha a sablon functions.php fájlját választjuk, akkor érdemes előtte gyerek sablont (child theme) létrehozni, és ennek a functions.php fájljába illeszteni. Így egy sablon frissítésnél nem fog elveszni a kódrészlet.