Jeśli sprzedajesz produkty w paczkach (np. 6 sztuk mięsa, kosmetyków czy innych artykułów), być może potrzebujesz, by za każde 6 sztuk naliczała się osobna przesyłka. Standardowo WooCommerce nie wspiera takiej funkcji, ale… można to rozwiązać prostym kawałkiem kodu PHP – bez konieczności kupowania płatnych wtyczek.
W tym wpisie pokażę Ci krok po kroku, jak to zrobić.
🎯 Cel
Za każde 6 produktów w koszyku:
- ma zostać naliczony koszt jednej paczki,
- klient może wybrać spośród kilku przewoźników (np. InPost, Orlen),
- WooCommerce automatycznie przelicza koszt zależnie od liczby sztuk.
🔧 Jak to działa?
Za pomocą prostego filtra PHP zliczamy wszystkie produkty w koszyku, dzielimy przez 6 i na tej podstawie mnożymy koszt przesyłki.
Na przykład:
- 6 sztuk = 1 paczka,
- 7–12 sztuk = 2 paczki,
- 13–18 sztuk = 3 paczki itd.
✅ Krok 1: Przygotuj metody wysyłki
Przejdź do:
WooCommerce → Ustawienia → Wysyłka → Strefy wysyłki → np. „Polska”
Dodaj 3 metody:
- InPost Kurier – stawka ryczałtowa,
- InPost Paczkomat – stawka ryczałtowa,
- Orlen Paczka – stawka ryczałtowa.
Wpisz dowolny koszt (np. 1 zł) – zostanie on nadpisany przez kod.
🧑💻 Krok 2: Dodaj kod PHP
Najłatwiej zrobisz to za pomocą wtyczki Code Snippets. Po instalacji dodaj nowy snippet z następującym kodem:
add_filter('woocommerce_package_rates', 'dynamic_shipping_per_6_items', 10, 2);
function dynamic_shipping_per_6_items($rates, $package) {
$items_count = 0;
// Zlicz ilość wszystkich sztuk produktów w koszyku
foreach (WC()->cart->get_cart() as $cart_item) {
$items_count += $cart_item['quantity'];
}
// Oblicz liczbę paczek (jedna paczka = 6 szt.)
$packages = ceil($items_count / 6);
// Stawki wysyłek za jedną paczkę – DOPASUJ DO SWOJEGO SKLEPU
$base_costs = [
'flat_rate:3' => 25.19, // InPost Kurier
'flat_rate:4' => 19.49, // InPost Paczkomat
'flat_rate:5' => 14.00, // Orlen Paczka
];
foreach ($rates as $rate_id => $rate) {
if (isset($base_costs[$rate_id])) {
$rates[$rate_id]->cost = $base_costs[$rate_id] * $packages;
}
}
return $rates;
}
🔎 WAŻNE: Zmienna flat_rate:3
to przykładowy identyfikator metody wysyłki. Twój może być inny – sprawdź go według instrukcji poniżej.
🕵️ Krok 3: Jak sprawdzić ID metod wysyłki?
Dodaj tymczasowy kod do Code Snippets, by podejrzeć identyfikatory metod wysyłki na stronie koszyka:
add_action('woocommerce_review_order_before_shipping', 'show_shipping_rate_ids_debug');
function show_shipping_rate_ids_debug() {
$packages = WC()->shipping->get_packages();
foreach ($packages as $package_id => $package) {
foreach ($package['rates'] as $rate_id => $rate) {
echo '<p style="color:red;">Rate ID: ' . esc_html($rate_id) . ' (label: ' . esc_html($rate->get_label()) . ')</p>';
}
}
}
Po jego włączeniu, na stronie koszyka zobaczysz identyfikatory np.:
Rate ID: flat_rate:3 (label: InPost Kurier)
Rate ID: flat_rate:4 (label: InPost Paczkomat)
Rate ID: flat_rate:5 (label: Orlen Paczka)
Te wartości należy wkleić do $base_costs[]
w głównym kodzie.
🧪 Krok 4: Przetestuj działanie
- Dodaj 6 produktów do koszyka – powinien naliczyć jedną przesyłkę.
- Dodaj 7 – koszt przesyłki powinien wzrosnąć (bo to już 2 paczki).
- Klient może wybrać przewoźnika, a system policzy odpowiednią cenę.
🔒 BONUS: Wtyczka Furgonetka.pl
Jeśli korzystasz z integracji z Furgonetka.pl (lub podobnej), możesz nadal generować etykiety automatycznie – kod nie zaburza działania integracji, jedynie modyfikuje logikę naliczania kosztów wysyłki.
✅ Podsumowanie
To rozwiązanie:
- działa w 100% za darmo,
- nie wymaga płatnych wtyczek do wysyłki,
- jest w pełni elastyczne – możesz je łatwo zmodyfikować np. na 3 sztuki/paczkę, wagę itd.
💡 Jeśli prowadzisz sklep z paczkowanymi zestawami produktów (np. delikatesy, catering, mięso, kosmetyki), ten prosty kod może znacznie ułatwić życie Tobie i klientom.
Masz pytania lub potrzebujesz pomocy w dostosowaniu kodu do własnego sklepu? Napisz do mnie – chętnie pomogę 💻