Články

WooCommerce: Zobrazit pouze dopravu zdarma

Potřebujete při zobrazení dopravy zdarma skrýt všechny ostatní metody? Jak na to vám ukážu v tomto článku.

Pokud využíváte ve WooCommerce dopravu zdarma, tak jste přišli na to, že se zobrazuje mezi všemi ostatními dopravami. Co když chcete zobrazit pouze dopravu zdarma a skrýt přitom ostatní dopravy? Řešení si ukážeme několik, ale pokud byste ji chtěli vidět rovnou jako součást WooCommerce, tak pro něj můžete hlasovat zde.

Při tvorbě tohoto tutoriálu vycházím z oficiální dokumentace WooCommerce.

S použitím pluginu

Pokud potřebujete větší flexibilitu anebo se nechcete zabývat vkládáním kódu, můžete použít následující pluginy:

WC Hide Shipping methods je jednoduchý plugin zdarma, který dělá přesně to, co následující výstřižky kódu: umožní zobrazit pouze dopravu zdarma anebo dopravu zdarma a místní vyzvednutí.

Multiple Packages for WooCommerce je komplikovanější plugin zdarma. Dodá vám maximální flexibilitu v otázce nastavování dopravy pro určitou třídu nebo dokonce produkt.

Bez použití pluginu

Předtím než vložíte některý z následujících snippetů (pro WooCommerce 3.0+), si vyčištěte WooCommerce cache. Přejdětě do Go to WooCommerce > Stav > Nástroje  a v řádku WooCommerce transienty klikněte na tlačítko Vyčistit transienty.

Následující kód vložte do souboru functions.php své odvozené (child) šablony nebo použijte plugin, který vám umožní vkládat výstřižky kódu jako je např. Code snippets. Prosím, nevkládajte vlastní kód přímo do kódu originální šablony – o provedené úpravy vás připraví následující aktualizace šablony.

Skrýt vše kromě dopravy zdarma

Pokud je dostupná doprava zdarma, všechny ostatní dopravy jsou skryté. Plně kompatibilní se Zónami dopravy.


/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function my_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', 'my_hide_shipping_when_free_is_available', 100 );

Skrýt vše kromě dopravy zdarma a místního vyzvednutí

Pokud je dostupná doprava zdarma, všechny ostatní dopravy kromě místního vyzvednutí jsou skryté. Plně kompatibilní se Zónami dopravy.


/**
* Hide shipping rates when free shipping is available, but keep "Local pickup"
* Updated to support WooCommerce 2.6 Shipping Zones
*/
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it's present.
foreach ( $rates as $rate_id => $rate ) {
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );