- Krzysztof Jagodziński
- Kategoria: WooCommerce
Darmowa dostawa z wyborem metody wysyłki przez klienta - WooCommerce

WooCommerce to rozbudowana platforma e-commerce z dużą społecznością, ale jak wszędzie brakuje jej drobnych usprawnień. Czasami pojawiają się one w oficjalnych aktualizacjach, choć nie zawsze tak szybko, jakbyśmy chcieli.
Jednym z takich braków jest sposób działania darmowej dostawy. WooCommerce pozwala na jej aktywację po przekroczeniu określonego progu, problem w tym, że wtedy tylko ona staje się bezpłatna – pozostałe metody dostawy nadal mają swoją cenę. Może to być mylące dla klientów, którzy spodziewają się darmowej wysyłki, ale widzą płatne opcje dostawy bez jasnej informacji o zerowym koszcie. Nie umożliwia też jasnego wyboru po stronie klienta, którą formą chciałby otrzymać swoją przesyłkę.
Dziś pokażę Ci prosty kod PHP, który zamiast dodawać osobną opcję „Darmowa dostawa”, automatycznie zeruje koszt wszystkich metod wysyłki po osiągnięciu określonej kwoty. Dzięki temu klient ma pełen wachlarz wyboru sposobu dostawy, a jednocześnie zyskuje pewność, że każda opcja jest darmowa. Kod jest prosty do wdrożenia i testowany na wydaniu WooCommerce 9.x.
1. Jak działa kod, który zachowa wybór metody dostawy przy darmowej wysyłce w WooCommerce ?
Poniższy kod pozwala na automatyczne wyzerowanie kosztów wszystkich metod wysyłki po przekroczeniu określonego progu zamówienia (domyślnie 250 zł). WooCommerce domyślnie umożliwia dodanie warunku darmowej dostawy, ale nie zmienia cen pozostałych metod – klient wciąż widzi standardowe opłaty za kuriera czy paczkomat. Rozwiązanie które napisałem eliminuje ten problem, zachowując pełny wybór metod wysyłki, ale ustawiając ich koszt na 0 zł.
Jak działa kod?
- Sprawdzanie wartości koszyka
Kod pobiera wartość koszyka i porównuje ją z ustalonym progiem darmowej dostawy (DARMOWA_DOSTAWA). Jeśli kwota zostanie przekroczona, przechodzi do modyfikacji stawek wysyłki. - Modyfikacja kosztów dostawy
Funkcja gr8_zeruj_wysylke przechodzi przez wszystkie dostępne metody wysyłki i ustawia ich koszt na 0 zł. Dodatkowo, każda z nich otrzymuje dopisek „(Darmowa dostawa)”, aby klient widział, że nie ponosi kosztów transportu. - Autonomiczne działanie
Całość odbywa się automatycznie – klient nie musi podejmować żadnych dodatkowych działań. Wystarczy, że jego zamówienie przekroczy ustalony próg, a WooCommerce natychmiast dostosuje ceny wysyłki do obecnych metod ustawiając ją na 0zł.


2. Jak umożliwić wybór metody wysyłki po osiągnięciu kwoty darmowej dostawy WooCommerce ?
Aby skorzystać z tego rozwiązania w swoim sklepie, wystarczy dodać poniższy kod do pliku functions.php, ale koniecznie w motywie potomnym. Jeśli nie wiesz jeszcze czym jest motyw potomny (child theme), zachęcam aby najpierw zapoznać się z dedykowanym poradnikiem na jego temat lub do kontaktu ze mną tak abym mógł pomóc 🙂
1. Dodanie kodu do pliku functions.php
- Przejdź w WordPressie do Wygląd > Edytor plików motywu, upewnij się, że masz aktywny motyw potomny, a następnie otwórz plik functions.php. Przewiń jego zawartość na sam dół, wklej kod i zapisz zmiany.
2. Ustawienie progu darmowej dostawy
- Domyślnie kod ustawia próg darmowej dostawy na 250 zł. Jeśli chcesz go zmienić, zerknij na dalszą część poradnika lub dokonaj zmiany bezpośrednio w linii:
define(’DARMOWA_DOSTAWA’, 250);
3. Testowanie działania
- Po zapisaniu zmian wyczyść pamięć podręczną, a następnie przejdź przez proces składania zamówienia. Sprawdź, czy po przekroczeniu ustalonego progu cena wszystkich metod wysyłki została ustawiona na 0 zł, a do ich etykiety dodał się dopisek „(Darmowa dostawa)”.
4. Masz pytanie lub problem?
- Jeśli coś nie działa prawidłowo lub masz wątpliwości, skontaktuj się ze mną przez formularz kontaktowy – chętnie pomogę!
/**
* Autor: Greatsite.pl
* Funkcjonalność: Darmowa wysyłka z opcją wyboru metody dostawy przez klienta.
*/
define('DARMOWA_DOSTAWA', 250);
function gr8_zeruj_wysylke($rates, $package) {
if (!is_admin() && !empty($rates)) {
$cart_total = WC()->cart->get_subtotal();
if ($cart_total >= DARMOWA_DOSTAWA) {
foreach ($rates as $rate_id => $rate) {
$rates[$rate_id]->cost = 0;
$rates[$rate_id]->label .= ' (Darmowa dostawa)';
}
}
}
return $rates;
}
add_filter('woocommerce_package_rates', 'gr8_zeruj_wysylke', 100, 2);
3. Jak zmienić próg darmowej wysyłki w WooCommerce, zachowując wybór opcji dostawy dla klienta?
Jeśli kod został dodany do functions.php, domyślnie będzie działał, gdy wartość koszyka osiągnie 250 zł. Jeśli chcesz zmienić tę kwotę, wystarczy dostosować wartość w linii z definicją DARMOWA_DOSTAWA. Oto jak to zrobić:
define('DARMOWA_DOSTAWA', 250); // Zmień 250 na minimum które chcesz ustawić
Jeśli chcesz zmienić kwotę progu darmowej dostawy, wystarczy zaktualizować wartość 250 na dowolną inną kwotę, którą chcesz ustalić w swoim sklepie. Zmiana tej wartości dostosuje próg, po którym aktywuje się darmowa dostawa.
Pamiętaj, aby dokonać tej zmiany w pliku functions.php, w definicji DARMOWA_DOSTAWA.
Upewnij się że korzystasz z motywu potomnego, w innym wypadku rozwiązanie które wprowadzasz nadpiszę się przy kolejnej aktualizacji motywu.
Po dokonaniu zmian, zapisz plik i przejdź do testowania procesu składania zamówienia.
4. Podsumowanie
W tym poradniku pokazałem, jak usprawnić i rozszerzyć działanie darmowej wysyłki w WooCommerce, umożliwiając klientom wybór preferowanej metody dostawy po osiągnięciu progu. Po przekroczeniu określonej kwoty w koszyku kupujący będzie mógł wybrać spośród różnych opcji dostawy (np. kurier, paczkomat), a ich koszty zostaną ustawione na bezpłatne, co dodatkowo podkreśliłem dzięki etykiecie przy nazwie wysyłki. Zalecam aby przed wdrożeniem rozwiązania na faktyczny sklep przetestować jego kompatybilność na stronie zapasowej.