Kobieta Koduje

Jak naliczać koszt wysyłki co 6 produktów w WooCommerce – darmowe rozwiązanie bez wtyczek PRO

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ę 💻

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.