{"id":90116,"date":"2026-10-16T08:40:00","date_gmt":"2026-10-16T06:40:00","guid":{"rendered":"https:\/\/codescriptum.pl\/blog\/koszty-wysylki-w-woocommerce-licza-sie-zle\/"},"modified":"2026-10-16T08:40:00","modified_gmt":"2026-10-16T06:40:00","slug":"koszty-wysylki-w-woocommerce-licza-sie-zle","status":"publish","type":"post","link":"https:\/\/codescriptum.pl\/blog\/koszty-wysylki-w-woocommerce-licza-sie-zle\/","title":{"rendered":"Koszty wysy\u0142ki w WooCommerce licz\u0105 si\u0119 \u017ale - przyczyny i jak to przetestowa\u0107"},"content":{"rendered":"<p>Koszty wysy\u0142ki w WooCommerce licz\u0105 si\u0119 \u017ale najcz\u0119\u015bciej z czterech powod\u00f3w: klient trafia do niew\u0142a\u015bciwej strefy, klasy wysy\u0142kowe i typ naliczania nie pasuj\u0105 do produkt\u00f3w, pr\u00f3g darmowej dostawy liczy si\u0119 inaczej przy kuponie albo produkty nie maj\u0105 wagi i wymiar\u00f3w, z kt\u00f3rych korzysta metoda. Napraw\u0119 zaczyna si\u0119 od trybu debugowania i testu kilku typowych koszyk\u00f3w, a nie od instalowania kolejnej wtyczki.<\/p>\n<h2>Jak wygl\u0105da problem z kosztami wysy\u0142ki?<\/h2>\n<p>Klient widzi koszt dostawy, kt\u00f3ry nie zgadza si\u0119 z cennikiem sklepu, albo koszt zmienia si\u0119 mi\u0119dzy koszykiem a zam\u00f3wieniem. Cz\u0119\u015b\u0107 klient\u00f3w rezygnuje, a cz\u0119\u015b\u0107 p\u0142aci za ma\u0142o i r\u00f3\u017cnic\u0119 pokrywasz Ty.<\/p>\n<ul>\n<li>koszt ro\u015bnie z ka\u017cd\u0105 sztuk\u0105 w koszyku, cho\u0107 wszystko mie\u015bci si\u0119 w jednej paczce,<\/li>\n<li>darmowa dostawa w\u0142\u0105cza si\u0119 po u\u017cyciu kuponu poni\u017cej progu albo nie w\u0142\u0105cza si\u0119 mimo spe\u0142nienia progu,<\/li>\n<li>klient z jednego regionu widzi metody przeznaczone dla innego, np. odbi\u00f3r osobisty,<\/li>\n<li>przy produkcie gabarytowym sklep pokazuje stawk\u0119 za ma\u0142\u0105 paczk\u0119,<\/li>\n<li>koszyk pokazuje inn\u0105 kwot\u0119 ni\u017c zam\u00f3wienie albo kwota zmienia si\u0119 dopiero po od\u015bwie\u017ceniu.<\/li>\n<\/ul>\n<p>Je\u015bli brakuje samej metody dostawy do paczkomatu albo mapy wyboru punktu, to osobny problem, opisany we wpisie <a href=\"\/blog\/woocommerce-brak-paczkomatow-inpost\/\">brak paczkomat\u00f3w InPost przy zam\u00f3wieniu<\/a>.<\/p>\n<h2>Dlaczego WooCommerce \u017ale liczy koszty wysy\u0142ki?<\/h2>\n<p>Bo koszt wynika z kilku ustawie\u0144 naraz: strefy, metody, klasy wysy\u0142kowej, progu i danych produktu. Wystarczy, \u017ce jedno z nich nie pasuje do reszty, a wynik jest b\u0142\u0119dny tylko dla cz\u0119\u015bci koszyk\u00f3w, wi\u0119c \u0142atwo go przeoczy\u0107.<\/p>\n<h3>Z\u0142a kolejno\u015b\u0107 stref wysy\u0142ki<\/h3>\n<p>WooCommerce dopasowuje adres do stref od g\u00f3ry listy i u\u017cywa pierwszej pasuj\u0105cej. Je\u015bli strefa \u201ePolska\u201d stoi nad stref\u0105 z kodami pocztowymi Twojego miasta, klienci z miasta nigdy nie zobacz\u0105 odbioru osobistego ani lokalnej stawki. W\u0119\u017csze strefy musz\u0105 by\u0107 wy\u017cej ni\u017c szersze.<\/p>\n<h3>Klasy wysy\u0142kowe i typ naliczania<\/h3>\n<p>W stawce rycza\u0142towej koszt klas mo\u017cna nalicza\u0107 osobno dla ka\u017cdej klasy w koszyku albo raz na zam\u00f3wienie, wed\u0142ug najdro\u017cszej klasy. Ustawienie \u201edla ka\u017cdej klasy\u201d przy kilku klasach w koszyku sumuje stawki. Koszt wpisany jako formu\u0142a z liczb\u0105 sztuk sprawia, \u017ce dostawa dro\u017ceje z ka\u017cd\u0105 sztuk\u0105. Produkty bez klasy dostaj\u0105 koszt z osobnego pola dla produkt\u00f3w bez klasy wysy\u0142kowej, kt\u00f3re \u0142atwo przeoczy\u0107, a warianty mog\u0105 mie\u0107 inn\u0105 klas\u0119 ni\u017c produkt g\u0142\u00f3wny.<\/p>\n<h3>Pr\u00f3g darmowej dostawy i kupony<\/h3>\n<p>Darmowa wysy\u0142ka mo\u017ce wymaga\u0107 kuponu, minimalnej kwoty, jednego z nich albo obu. Osobne pole decyduje, czy pr\u00f3g liczy si\u0119 przed rabatem z kuponu, czy po nim, a sam kupon mo\u017ce mie\u0107 zaznaczon\u0105 opcj\u0119 darmowej wysy\u0142ki. Gdy te ustawienia nie s\u0105 sp\u00f3jne z regulaminem promocji, klient z kuponem dostaje darmow\u0105 dostaw\u0119 poni\u017cej progu albo nie dostaje jej, cho\u0107 powinien. Pami\u0119taj te\u017c, \u017ce darmowa wysy\u0142ka nie ukrywa sama p\u0142atnych metod.<\/p>\n<h3>Brak wagi i wymiar\u00f3w<\/h3>\n<p>Wtyczki tabel koszt\u00f3w i kalkulatory przewo\u017anik\u00f3w licz\u0105 koszt z wagi i wymiar\u00f3w. Produkt bez wagi wa\u017cy dla nich zero, wi\u0119c koszyk z ci\u0119\u017ckim towarem dostaje najta\u0144sz\u0105 stawk\u0119. Problem cz\u0119sto pojawia si\u0119 po imporcie produkt\u00f3w z pliku, w kt\u00f3rym nie by\u0142o tych kolumn. Sprawd\u017a te\u017c jednostki w WooCommerce, Ustawienia, Produkty: je\u015bli plik mia\u0142 wag\u0119 w gramach, a sklep liczy w kilogramach, produkt o wadze 500 g wa\u017cy nagle 500 kg.<\/p>\n<h3>Konflikty wtyczek i cache<\/h3>\n<p>Dwie wtyczki zmieniaj\u0105ce koszty, np. tabela koszt\u00f3w i modu\u0142 przewo\u017anika albo wtyczka promocji, potrafi\u0105 si\u0119 nawzajem nadpisywa\u0107. Cache stron lub serwera, kt\u00f3ry zapisa\u0142 koszyk albo zam\u00f3wienie, pokazuje stare kwoty, a WooCommerce dodatkowo przechowuje obliczone stawki w sesji klienta, wi\u0119c zmiana ustawie\u0144 nie zawsze jest widoczna od razu. Jak ustawi\u0107 wykluczenia z cache, opisujemy we wpisie <a href=\"\/blog\/koszyk-woocommerce-nie-aktualizuje-sie\/\">koszyk WooCommerce nie aktualizuje si\u0119<\/a>.<\/p>\n<h2>Jak przetestowa\u0107 koszty wysy\u0142ki na zestawie przypadk\u00f3w?<\/h2>\n<p>Przygotuj tabel\u0119 kilku typowych koszyk\u00f3w z oczekiwanym kosztem i sprawd\u017a ka\u017cdy w oknie incognito z w\u0142\u0105czonym trybem debugowania wysy\u0142ki. R\u00f3\u017cnica mi\u0119dzy kosztem oczekiwanym a pokazanym od razu wska\u017ce ustawienie, kt\u00f3re jest b\u0142\u0119dne.<\/p>\n<table>\n<thead>\n<tr>\n<th>Przypadek<\/th>\n<th>Koszyk i adres<\/th>\n<th>Co sprawdzasz<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Jeden ma\u0142y produkt, adres poza Twoim miastem<\/td>\n<td>Stawka podstawowa i w\u0142a\u015bciwa strefa<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Trzy sztuki ma\u0142ego produktu<\/td>\n<td>Czy koszt nie ro\u015bnie z ka\u017cd\u0105 sztuk\u0105<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>Produkt ma\u0142y i produkt gabarytowy<\/td>\n<td>Typ naliczania klas i stawka za gabaryt<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>Koszyk tu\u017c poni\u017cej progu darmowej dostawy<\/td>\n<td>Brak darmowej dostawy<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>Koszyk powy\u017cej progu z kuponem, kt\u00f3ry sprowadza go poni\u017cej<\/td>\n<td>Zgodno\u015b\u0107 z regulaminem promocji<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>Adres z kodem pocztowym strefy lokalnej<\/td>\n<td>Odbi\u00f3r osobisty i lokalne stawki<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>Adres zagraniczny<\/td>\n<td>Strefa dla zagranicy albo jasny komunikat<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>Wariant z inn\u0105 klas\u0105 ni\u017c produkt g\u0142\u00f3wny<\/td>\n<td>Klasa wariantu<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Ka\u017cdy przypadek sprawd\u017a w koszyku i w zam\u00f3wieniu, bo koszt mo\u017ce si\u0119 r\u00f3\u017cni\u0107 mi\u0119dzy tymi stronami. Zapisz wynik w tabeli i zachowaj j\u0105: ten sam test powt\u00f3rzysz po ka\u017cdej aktualizacji wtyczek wysy\u0142ki i po zmianie cennika przewo\u017anika.<\/p>\n<div class=\"csb-note csb-note--warn\">\n<p>Tryb debugowania wysy\u0142ki (WooCommerce, Ustawienia, Wysy\u0142ka, opcje wysy\u0142ki) pokazuje dopasowan\u0105 stref\u0119 i pomija zapisane stawki, ale jego komunikaty widz\u0105 tak\u017ce klienci. Testuj na kopii sklepu albo w godzinach najmniejszego ruchu i wy\u0142\u0105cz go zaraz po testach.<\/p>\n<\/div>\n<h2>Jak naprawi\u0107 koszty, gdy ju\u017c wiesz, gdzie jest b\u0142\u0105d?<\/h2>\n<p>Poprawiaj jedno ustawienie naraz i po ka\u017cdej zmianie powtarzaj ca\u0142y zestaw test\u00f3w, bo poprawka dla jednego koszyka cz\u0119sto psuje inny. Je\u015bli zasady s\u0105 z\u0142o\u017cone, zamiast \u0142\u0105czy\u0107 kilka wtyczek u\u017cyj jednej tabeli koszt\u00f3w albo integracji z przewo\u017anikiem.<\/p>\n<p>Przy kilku produktach w paczce zwykle sprawdza si\u0119 naliczanie wed\u0142ug najdro\u017cszej klasy w zam\u00f3wieniu, a przy towarach o bardzo r\u00f3\u017cnej wadze tabela koszt\u00f3w oparta na wadze. Gdy sklep wysy\u0142a cz\u0119\u015b\u0107 towaru z innego magazynu albo przez inn\u0105 firm\u0119 kuriersk\u0105, potrzebne s\u0105 osobne paczki i osobne stawki, czego proste metody WooCommerce nie obs\u0142uguj\u0105.<\/p>\n<h2>Lista kontrolna koszt\u00f3w wysy\u0142ki<\/h2>\n<ul>\n<li>strefy u\u0142o\u017cone od najw\u0119\u017cszej do najszerszej,<\/li>\n<li>ka\u017cdy produkt i wariant ma klas\u0119 wysy\u0142kow\u0105, wag\u0119 i wymiary,<\/li>\n<li>typ naliczania klas zgodny z tym, jak pakujesz zam\u00f3wienia,<\/li>\n<li>pr\u00f3g darmowej dostawy i kupony zgodne z regulaminem promocji,<\/li>\n<li>za obliczanie koszt\u00f3w odpowiada jedna wtyczka,<\/li>\n<li>koszyk, zam\u00f3wienie i konto wykluczone z cache,<\/li>\n<li>tabela test\u00f3w zapisana i powtarzana po ka\u017cdej aktualizacji.<\/li>\n<\/ul>\n<p>Konfiguracj\u0119 wysy\u0142ki, tabele koszt\u00f3w i integracje z przewo\u017anikami robimy przy wdro\u017ceniach <a href=\"https:\/\/codescriptum.pl\/sklepy-woocommerce\/\">sklep\u00f3w WooCommerce<\/a>. Ten problem jest jednym z naszej listy <a href=\"\/blog\/100-problemow-woocommerce\/\">100 problem\u00f3w z WooCommerce<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Koszty wysy\u0142ki w WooCommerce licz\u0105 si\u0119 \u017ale najcz\u0119\u015bciej z czterech powod\u00f3w: klient trafia do niew\u0142a\u015bciwej strefy, klasy wysy\u0142kowe i typ naliczania nie pasuj\u0105 do produkt\u00f3w, pr\u00f3g darmowej dostawy liczy si\u0119\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32],"tags":[],"class_list":["post-90116","post","type-post","status-publish","format-standard","hentry","category-sklepy-internetowe"],"_links":{"self":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts\/90116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/comments?post=90116"}],"version-history":[{"count":0,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/posts\/90116\/revisions"}],"wp:attachment":[{"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/media?parent=90116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/categories?post=90116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codescriptum.pl\/blog\/wp-json\/wp\/v2\/tags?post=90116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}