Polski for WooCommerce
Darmowa wtyczka dostosowująca WooCommerce do polskich warunków prawno-gospodarczych. GPSR, Omnibus, RODO, DSA, KSeF-ready i funkcje storefront w jednym miejscu.
Polski for WooCommerce łączy wymagania polskiego rynku, aktualne dyrektywy EU i funkcje sklepowe w jednym pluginie. Zamiast instalować 10 osobnych wtyczek do obsługi cen jednostkowych, formularzy zwrotów, GPSR, DSA, danych spożywczych, audytu zgodności i narzędzi merchandisingowych - masz wszystko w jednym pakiecie.
Wtyczka jest aktualnie w trakcie przeglądu na WordPress.org. Kod źródłowy dostępny na GitHub.
Wymagania: WordPress 6.4+, WooCommerce 8.0+, PHP 8.1+ | Wersja: 1.3.0 | Licencja: GPLv2
Potrzebujesz faktur PDF, KSeF, walidacji NIP, InPost lub multi-step checkout? Zobacz Polski PRO - rozszerzenie premium, które dodaje funkcje operacyjne do darmowej wersji.
Spis treści
- Instalacja i konfiguracja
- GPSR - bezpieczeństwo produktów
- Omnibus - najniższa cena z 30 dni
- Odstąpienie od umowy - zwroty
- Moduły sklepowe
- Produkty spożywcze
- Pozostałe moduły (DSA, KSeF, RODO, NIP, marki, Schema.org, CRA, DPA i więcej)
- Obsługiwane języki
- Wymagania techniczne
- Shortcodes
- Zgłaszanie błędów i dyskusje
Instalacja i konfiguracja
Rozpoczęcie pracy
Konfiguracja Polski for WooCommerce składa się z 6 kroków. Większość ustawień działa z wartościami domyślnymi - wystarczy włączyć moduły.
Instalacja
Z panelu WordPress (zalecane)
- Przejdź do Wtyczki > Dodaj nową
- Wyszukaj Polski for WooCommerce
- Kliknij Zainstaluj i Aktywuj
- Nowe menu Polski pojawi się w pasku bocznym
Ręcznie z pliku ZIP
- Pobierz ZIP z GitHub
- Wtyczki > Dodaj nową > Wgraj wtyczkę
- Wybierz plik ZIP i kliknij Zainstaluj
- Kliknij Aktywuj
Włączenie modułów
Po aktywacji przejdź do Polski > Moduły. Zobaczysz listę 42 dostępnych modułów pogrupowanych w kategorie:
- Ceny i Omnibus - cena jednostkowa, najniższa cena z 30 dni, wyświetlanie VAT, cena “od” dla produktów z wariantami, obserwator progu OSS (10 000 EUR)
- Checkout - przycisk zamówienia, checkboxy prawne, NIP, minimalna wartość/ilość zamówienia
- Zgodność prawna - GPSR, DSA, KSeF, greenwashing, RODO
- Prawa konsumenta - formularz zwrotu, strony prawne, ODR
- Informacje o produktach - czas dostawy, producent, marki, GTIN
- Produkty spożywcze - wartości odżywcze, alergeny, Nutri-Score
- Moduły sklepowe - wishlist, porównywarka, quick view, filtry, wyszukiwarka
- Email - załączniki prawne, double opt-in, automatyczne prośby o opinie po zakupie
- Narzędzia - dashboard zgodności, audyt sklepu
Każdy moduł ma przełącznik on/off. Włącz te, których potrzebujesz.
Konfiguracja prawna (minimum)
Dla podstawowej zgodności z polskim prawem włącz:
- Checkboxy prawne - przejdź do ustawień modułu, włącz checkboxy dla regulaminu, polityki prywatności i prawa odstąpienia
- Przycisk zamówienia - automatycznie zmienia tekst na “Zamawiam z obowiązkiem zapłaty”
- Strony prawne - wybierz swoje strony Regulaminu, Polityki prywatności i Prawa odstąpienia
Konfiguracja VAT
- Upewnij się, że masz poprawne stawki VAT w WooCommerce > Ustawienia > Podatki (23%, 8%, 5%, 0%)
- Włącz moduł Wyświetlanie VAT i wybierz tryb (brutto/netto)
- Jeśli korzystasz ze zwolnienia podmiotowego (art. 113) - zaznacz odpowiedni checkbox
GPSR (jeśli sprzedajesz produkty fizyczne)
Od 13 grudnia 2024 rozporządzenie GPSR wymaga podania na stronie produktu danych producenta i osoby odpowiedzialnej. Włącz moduł GPSR i uzupełnij dane w zakładce Polski w edytorze produktu.
Dashboard zgodności
Przejdź do Polski > Dashboard i kliknij Sprawdź zgodność. System zweryfikuje:
- Czy strony prawne są utworzone i przypisane
- Czy checkboxy prawne są włączone na checkoucie
- Czy przycisk zamówienia ma poprawny tekst
- Czy stawki VAT są skonfigurowane
- Czy dane GPSR są uzupełnione (jeśli moduł aktywny)
Wynik zielony/czerwony dla każdego punktu. Napraw czerwone elementy i sprawdź ponownie.
Szablony motywu
Wszystkie szablony wtyczki można nadpisać z motywu. Skopiuj plik z wp-content/plugins/polski/templates/ do wp-content/themes/your-theme/polski/ i edytuj.
REST API
Wtyczka udostępnia pełne API REST pod namespace polski/v1/:
GET /polski/v1/settings- pobierz ustawieniaPOST /polski/v1/settings- zaktualizuj ustawieniaGET /polski/v1/withdrawals- lista zgłoszeń zwrotówGET /polski/v1/checkboxes- konfiguracja checkboxów
Dokumentacja API dostępna po zainstalowaniu wtyczki.
WP-CLI
wp polski migrate # uruchom migracje bazy danych
wp polski smoke-test # sprawdź poprawność instalacji
GPSR - ogólne bezpieczeństwo produktów
Od 13 grudnia 2024 roku rozporządzenie UE 2023/988 (GPSR - General Product Safety Regulation) wymaga, aby strony produktów w sklepach internetowych zawierały dane producenta oraz osoby odpowiedzialnej za zgodność produktu z przepisami. Moduł GPSR w Polski for WooCommerce automatycznie wyświetla te informacje na stronie produktu i udostępnia narzędzia do zarządzania nimi w panelu admina.
Włączenie modułu
- Przejdź do Polski > Moduły
- Znajdź sekcję Zgodność prawna
- Włącz moduł GPSR
- Zapisz zmiany
Po włączeniu moduł zarejestruje nowe pola w edytorze produktu i doda kolumnę statusu na liście produktów.
Pola GPSR w edytorze produktu
Po włączeniu modułu w edytorze każdego produktu pojawia się sekcja GPSR - Bezpieczeństwo produktu (zakładka Polski). Zawiera ona 8 pól:
| Pole | Typ | Opis |
|---|---|---|
| Nazwa producenta | tekst | Pełna nazwa podmiotu, który wytworzył produkt |
| Adres producenta | textarea | Pełny adres pocztowy producenta |
| Nazwa importera | tekst | Nazwa importera (wypełnij, jeśli produkt pochodzi spoza UE) |
| Adres importera | textarea | Pełny adres pocztowy importera |
| Osoba odpowiedzialna | tekst | Podmiot w UE odpowiedzialny za zgodność produktu z GPSR |
| Identyfikator produktu | tekst | Numer partii, numer seryjny lub inny identyfikator |
| Ostrzeżenia bezpieczeństwa | textarea | Ostrzeżenia wymagane przez przepisy lub producenta |
| Instrukcje bezpieczeństwa | textarea | Instrukcje dotyczące bezpiecznego użytkowania |
Sekcja GPSR na stronie produktu wyświetla się tylko wtedy, gdy przynajmniej jedno pole jest wypełnione. Dane prezentowane są w elemencie <details> z nagłówkiem “Bezpieczeństwo produktu (GPSR)” - klient może go rozwinąć klikając.
Wyświetlanie na stronie produktu
Moduł automatycznie wstrzykuje sekcję GPSR pod informacjami o produkcie (hook woocommerce_product_meta_end). Pokazuje tylko te pola, które mają uzupełnioną wartość.
Struktura HTML sekcji:
<div class="polski-gpsr-info">
<details class="polski-gpsr-info__details">
<summary class="polski-gpsr-info__summary">Bezpieczeństwo produktu (GPSR)</summary>
<dl class="polski-gpsr-info__list">
<dt>Producent</dt>
<dd>Nazwa producenta</dd>
<!-- kolejne pola -->
</dl>
</details>
</div>
Stylowanie sekcji możesz dostosować przez CSS w motywie, używając klas .polski-gpsr-info, .polski-gpsr-info__details i .polski-gpsr-info__list.
Jeśli chcesz zmienić układ lub treść sekcji, skopiuj szablon z:
wp-content/plugins/polski/templates/single-product/gpsr-info.php
do:
wp-content/themes/twoj-motyw/polski/single-product/gpsr-info.php
Kolumna statusu GPSR na liście produktów
Na liście produktów (Produkty > Wszystkie produkty) moduł dodaje kolumnę GPSR z wizualnym wskaźnikiem wypełnienia danych:
- Zielony znacznik (✓) - uzupełnione 3 lub więcej pól z 8
- Żółty trójkąt ostrzegawczy - uzupełnione 1-2 pola
- Szary myślnik - brak wypełnionych pól
Po najechaniu na ikonę pojawia się tooltip z liczbą uzupełnionych pól, np. “5/8 pol wypelnionych”. Dzięki temu możesz szybko zidentyfikować produkty wymagające uzupełnienia danych GPSR bez otwierania każdego z nich.
Import i eksport CSV
Moduł GPSR jest w pełni obsługiwany przez mechanizm importu/eksportu CSV w Polski for WooCommerce. To najszybszy sposób na uzupełnienie danych GPSR dla wielu produktów jednocześnie.
Eksport
- Przejdź do Polski > Import / Eksport CSV
- Kliknij Eksportuj produkty
- Pobierz plik CSV
W pliku CSV każdy produkt ma kolumny GPSR z prefiksem polski_gpsr_:
| Kolumna CSV | Odpowiadające pole |
|---|---|
polski_gpsr_manufacturer_name | Nazwa producenta |
polski_gpsr_manufacturer_address | Adres producenta |
polski_gpsr_importer_name | Nazwa importera |
polski_gpsr_importer_address | Adres importera |
polski_gpsr_responsible_person | Osoba odpowiedzialna |
polski_gpsr_product_identifier | Identyfikator produktu |
polski_gpsr_safety_warnings | Ostrzeżenia bezpieczeństwa |
polski_gpsr_instructions | Instrukcje bezpieczeństwa |
Import
- Uzupełnij kolumny GPSR w pliku CSV (kolumna
idlubskujest wymagana do identyfikacji produktu) - Przejdź do Polski > Import / Eksport CSV
- Wgraj plik i kliknij Importuj
- Wtyczka zaktualizuje meta produktów dla wszystkich wierszy w pliku
Import nadpisuje istniejące wartości. Puste komórki w CSV usuwają wcześniej zapisane dane dla danego pola.
Powiązane strony dokumentacji
Omnibus - najniższa cena z 30 dni
Moduł Omnibus w wtyczce Polski for WooCommerce automatycznie śledzi historię cen produktów i wyświetla najniższą cenę z ostatnich 30 dni przy produktach w promocji. Spełnia wymogi Dyrektywy Omnibus (UE 2019/2161), która obowiązuje w Polsce od 1 stycznia 2023 r.
Co to jest Dyrektywa Omnibus?
Dyrektywa Omnibus (UE 2019/2161) nakłada na sklepy internetowe obowiązek informowania klientów o najniższej cenie produktu z ostatnich 30 dni, gdy produkt jest prezentowany w promocji. Oznacza to, że obok ceny przekreślonej (regularnej) i ceny promocyjnej musi pojawić się komunikat w stylu: “Najniższa cena z ostatnich 30 dni: 89,00 zł”.
Moduł rejestruje cenę przy każdym zapisie produktu i przechowuje historię automatycznie. Nie wymaga ręcznego wprowadzania danych.
Włączenie modułu
- Przejdź do Polski > Moduły
- Znajdź moduł Najniższa cena (Omnibus) w grupie “Ceny i Omnibus”
- Włącz przełącznik i kliknij Zapisz ustawienia
- Od tego momentu plugin zaczyna zapisywać ceny przy każdym zapisie produktu
Jak działa śledzenie cen?
Cena jest rejestrowana automatycznie w dwóch sytuacjach:
- przy zapisaniu produktu prostego (woocommerce_update_product, woocommerce_new_product)
- przy zapisaniu wariantu produktu zmiennego (woocommerce_save_product_variation)
Każdego dnia zapisywany jest maksymalnie jeden rekord na produkt - duplikaty są pomijane. Moduł śledzi zarówno cenę regularną, jak i cenę promocyjną. Najniższa cena efektywna z okresu śledzenia jest obliczana automatycznie przy wyświetlaniu.
Stare rekordy są usuwane automatycznie przez zadanie cron (polski_daily_maintenance) zgodnie z ustawieniem “Przechowuj historię (dni)”.
Ustawienia modułu
Śledzenie cen
| Ustawienie | Wartość domyślna | Opis |
|---|---|---|
| Okres śledzenia (dni) | 30 | Liczba dni uwzględnianych przy obliczaniu najniższej ceny. Dyrektywa wymaga minimum 30 dni. |
| Przechowuj historię (dni) | 90 | Rekordy starsze niż ten limit są automatycznie usuwane z bazy danych. |
| Ceny z podatkiem | włączone | Gdy aktywne, śledzi i wyświetla ceny brutto (z VAT). |
Wyświetlanie
| Ustawienie | Wartość domyślna | Opis |
|---|---|---|
| Tylko produkty w promocji | włączone | Informacja pojawia się wyłącznie gdy produkt ma aktywną cenę promocyjną. |
| Strona produktu | włączone | Wyświetla komunikat na stronie pojedynczego produktu. |
| Lista produktów (sklep, kategorie) | wyłączone | Pokazuje komunikat w pętli produktów. |
| Produkty powiązane i polecane | wyłączone | Pokazuje komunikat w sekcjach “Podobne produkty” i “Polecane”. |
| Koszyk | wyłączone | Pokazuje komunikat przy produkcie w koszyku. |
| Pokazuj cenę regularną (przed promocją) | wyłączone | Dodatkowa informacja o cenie przed rozpoczęciem promocji. |
Szablon wiadomości
| Ustawienie | Wartość domyślna | Opis |
|---|---|---|
| Treść komunikatu | Najniższa cena z ostatnich {days} dni: {price} | Tekst wyświetlany przy produkcie. Obsługuje zmienne: {price}, {days}, {date}, {regular_price}. |
| Brak historii cen | Ukryj komunikat | Zachowanie gdy brak danych historycznych: ukryj / pokaż aktualną cenę / własny tekst. |
| Własny tekst (brak historii) | Cena nie uległa zmianie w okresie {days} dni | Tekst wyświetlany gdy brak historii i wybrana opcja “własny tekst”. |
| Liczona od | Dnia rozpoczęcia promocji | Punkt odniesienia: dnia rozpoczęcia promocji lub dnia dzisiejszego. |
Produkty wariantowe
| Ustawienie | Wartość domyślna | Opis |
|---|---|---|
| Śledź warianty oddzielnie | włączone | Każdy wariant produktu zmiennego ma własną, niezależną historię cen. |
Zmienne szablonu
W polu “Treść komunikatu” możesz używać następujących zmiennych:
{price}- najniższa cena efektywna z okresu śledzenia (sformatowana, z walutą){days}- liczba dni z ustawienia “Okres śledzenia”{date}- data zarejestrowania najniższej ceny{regular_price}- cena regularna produktu przed promocją
Przykładowe komunikaty:
Najniższa cena z ostatnich {days} dni: {price}
Poprzednia najniższa cena: {price} (przez ostatnie {days} dni)
Cena przed promocją: {regular_price} | Najniższa w 30 dni: {price}
Shortcode
Shortcode [polski_omnibus_price] pozwala wyświetlić informację o najniższej cenie w dowolnym miejscu - w opisie produktu, w szablonie strony lub w elemencie page buildera.
Podstawowe użycie (wyświetla cenę aktualnego produktu w pętli WooCommerce):
[polski_omnibus_price]
Z podaniem konkretnego produktu (poza pętlą WooCommerce, np. na stronie tekstowej):
[polski_omnibus_price product="123"]
Gdzie 123 to ID produktu. Shortcode zwraca pusty string gdy produkt nie jest na promocji (przy domyślnym ustawieniu “Tylko produkty w promocji”) lub gdy brak danych historycznych.
Kompatybilność z zewnętrznymi wtyczkami Omnibus
Wtyczka Polski for WooCommerce wykrywa automatycznie popularne zewnętrzne rozwiązania Omnibus (np. wc-price-history). Gdy taka wtyczka jest aktywna, moduł deleguje do niej pobieranie danych zamiast korzystać z własnej bazy historii cen. Status integracji jest widoczny w panelu modułu.
Gdy żadna zewnętrzna wtyczka nie jest zainstalowana, używany jest wbudowany system śledzenia.
Klasy CSS i filtr HTML
Wygenerowany HTML ma strukturę:
<div class="polski-omnibus-price">
<span class="polski-omnibus-price__text">Najniższa cena z ostatnich 30 dni: 89,00 zł</span>
</div>
Możesz modyfikować wygląd przez CSS w motywie lub użyć filtra PHP:
add_filter('polski/price/omnibus_html', function (string $html, $lowest, $product): string {
// $lowest to obiekt OmnibusPrice z polem effectivePrice() i currency
// $product to obiekt WC_Product
return $html;
}, 10, 3);


