- Podstawy pracy z hookami w WooCommerce
- Czym są hooki i gdzie działają
- Różnica między akcjami a filtrami
- Kluczowe pojęcia: funkcje, parametry i priorytety
- Jak znaleźć listę hooków WooCommerce
- Bezpieczeństwo i odporność na aktualizacje
- Przygotowanie środowiska i dobre praktyki wdrożeniowe
- Gdzie umieszczać kod: motyw potomny czy wtyczka
- Tworzenie motywu potomnego krok po kroku
- Priorytet i liczba argumentów w praktyce
- Porządek, nazewnictwo i organizacja
- Najczęstsze hooki i scenariusze użycia
- Strona produktu: dodawanie i modyfikowanie sekcji
- Koszyk i zamówienie: walidacje, komunikaty i opłaty
- Lista produktów i archiwum: filtry danych i układ siatki
- Maile transakcyjne: personalizacja treści i tematów
- Panel administracyjny: automatyzacje i czyszczenie danych
- Zaawansowane techniki, kompatybilność i diagnostyka
- Warunki kontekstowe i logika biznesowa
- Usuwanie i przenoszenie gotowych elementów
- Dynamiczne hooki WooCommerce
- Wydajność i ograniczanie kosztów
- Diagnostyka: jak sprawdzić, co i kiedy się uruchamia
- Kompatybilność z motywami i wtyczkami
- Strategia wdrożeń i kontrola jakości
- Przykładowe przepływy modyfikacji krok po kroku
- Najczęstsze błędy i jak ich unikać
- Utrzymanie i rozwój w dłuższej perspektywie
Jeśli budujesz sklep i chcesz zmienić jego zachowanie bez modyfikowania plików wtyczki, skorzystaj z mechanizmu rozszerzeń, który oferuje WooCommerce. To elastyczny system, w którym hooki pozwalają wstrzykiwać własny kod w wybrane miejsca lub modyfikować dane. Poznasz różnicę między akcje a filtry, nauczysz się je odnajdywać, bezpiecznie wdrażać oraz testować. Poniżej znajdziesz praktyczną instrukcję krok po kroku, która przeprowadzi Cię od podstaw po scenariusze zaawansowane.
Podstawy pracy z hookami w WooCommerce
Czym są hooki i gdzie działają
Hook to punkt zaczepienia w kodzie, który pozwala wykonać własną logikę w trakcie działania WooCommerce. Dwa główne typy to akcje (uruchamiają funkcje w konkretnym momencie) oraz filtry (przyjmują wartość, modyfikują ją i zwracają). Przykładowo, akcje mogą wstawić komunikat nad koszykiem, a filtry zmienić nazwę produktu przed jej wyświetleniem.
W praktyce działa to tak: WooCommerce publikuje w wielu miejscach „sygnał” z określoną nazwą hooka. Ty „podpinasz” własną funkcję do tej nazwy. Gdy kod dojdzie do punktu zaczepienia, Twoja funkcja zostanie wywołana. Dzięki temu możesz modyfikować wynik bez dotykania źródeł wtyczki.
Różnica między akcjami a filtrami
- Akcje (add_action): służą do uruchamiania logiki, np. dodawanie elementów HTML, zapisy w bazie, wyświetlanie komunikatów.
- Filtry (add_filter): służą do transformacji danych, np. zmiana ceny prezentowanej użytkownikowi, dostosowanie tytułów, atrybutów, adresów e-mail.
Ważne: filtr musi zawsze zwrócić przetworzoną wartość, inaczej element może zniknąć lub spowodować błąd. Akcja nie musi nic zwracać — liczy się efekt uboczny, który generuje.
Kluczowe pojęcia: funkcje, parametry i priorytety
Do hooka podpinasz funkcje (np. własne lub metody klas). Każde podpięcie może określać parametry (ile argumentów przyjmuje Twoja funkcja) oraz priorytet (w jakiej kolejności wykona się wobec innych). Domyślny priorytet to 10; mniejsza liczba oznacza wcześniejsze uruchomienie, większa — późniejsze. Z kolei liczba argumentów decyduje, ile danych z hooka Twoja funkcja odbierze. Jeżeli filtr przekazuje dwa argumenty, a Ty zadeklarujesz tylko jeden, drugi zostanie pominięty.
Jak znaleźć listę hooków WooCommerce
- Przejrzyj pliki szablonu WooCommerce w motywie: w katalogu woocommerce/ znajdziesz miejsca z do_action(’nazwa_hooka’) i apply_filters(’nazwa_hooka’).
- Włącz tryb debugowania i użyj narzędzi developerskich (np. wyszukiwanie w plikach), aby lokalizować konkretne nazwy hooków, gdy chcesz zmodyfikować dane widoczne w danym widoku.
- Przejdź przez kluczowe widoki (strona produktu, koszyk, checkout, maile) i spisz hooki, które chcesz wykorzystać w modyfikacjach.
Bezpieczeństwo i odporność na aktualizacje
Hooki są częścią publicznego API WordPressa i WooCommerce. Dobrą praktyką jest nie modyfikować kodu wtyczki, tylko dopinać się do właściwych punktów zaczepienia. Dzięki temu aktualizacje WooCommerce nie nadpiszą Twoich zmian. Zawsze testuj modyfikacje na kopii staging i korzystaj z kontroli wersji, aby łatwo cofać zmiany.
Przygotowanie środowiska i dobre praktyki wdrożeniowe
Gdzie umieszczać kod: motyw potomny czy wtyczka
Masz dwie główne drogi umieszczania logiki hooków:
- Motyw potomny (child theme): dodawaj podpięcia w pliku functions.php lub w dedykowanych plikach ładowanych przez motyw potomny. To dobra opcja, gdy modyfikacje dotyczą głównie prezentacji lub layoutu.
- Wtyczka lub narzędzie typu snippet: tworzenie własnej małej wtyczki albo użycie narzędzia do wstrzykiwania fragmentów pozwala przenieść logikę między motywami i uniezależnić ją od warstwy wizualnej.
Ogólna zasada: jeśli logika dotyczy biznesu (np. reguły cenowe, walidacje przy kasie), trzymaj ją bliżej wtyczki; jeśli dotyczy prezentacji (np. kolejność sekcji na karcie produktu), akceptowalny jest motyw potomny.
Tworzenie motywu potomnego krok po kroku
- Utwórz katalog z nazwą potomną i plik style.css z nagłówkiem szablonu (Template: nazwa_motywu_bazowego), aby odziedziczyć styl bazowy szablon.
- Dodaj functions.php i załaduj style motywu bazowego, a następnie własne.
- Upewnij się, że WooCommerce-dedicated pliki szablonu znajdują się w ścieżce your-child-theme/woocommerce/ tylko wtedy, gdy potrzebujesz je przesłonić. Do logiki hooków wystarczy functions.php lub autoload klas.
Priorytet i liczba argumentów w praktyce
Gdy podpinamy funkcję do akcji lub filtra, zwykle definiujemy trzy elementy: nazwę hooka, nazwę funkcji oraz priorytet. Dodatkowo w filtrach/akcjach przekazujemy informację, ile argumentów ma przyjąć Twoja funkcja. Jeśli w danym hooku WooCommerce przekazuje np. $product oraz $cart_item, zadeklaruj odbiór obu, aby w pełni korzystać z danych. Dobrze znając priorytety, możesz wstrzyknąć własny element wcześniej (np. nad przyciskiem „Dodaj do koszyka”) lub później (np. pod dodatkowymi informacjami).
Porządek, nazewnictwo i organizacja
- Stosuj unikalny prefiks w nazwach funkcji (np. sklep_, wcx_, brand_), aby uniknąć kolizji z innymi wtyczkami.
- Grupuj podpięcia tematycznie: produkt.php, checkout.php, emails.php lub klasy Product_Hooks, Checkout_Hooks…
- Komunikaty i stałe trzymaj w jednym miejscu, co ułatwi przenoszenie i lokalizację.
- Włącz rejestrowanie błędów i testy jednostkowe dla funkcji krytycznych biznesowo, aby zabezpieczyć przyszłe aktualizacje.
Najczęstsze hooki i scenariusze użycia
Strona produktu: dodawanie i modyfikowanie sekcji
Na karcie produktu znajdziesz wiele punktów zaczepienia, które kontrolują kolejność galerii, tytułu, ceny, przycisku zakupu czy metadanych. Przykładowe nazwy, które warto poznać: woocommerce_before_single_product, woocommerce_single_product_summary, woocommerce_after_single_product_summary, woocommerce_product_thumbnails.
- Dodanie komunikatu nad tytułem: podepnij się do woocommerce_single_product_summary z niższym priorytetem niż wyświetlanie tytułu, aby być wcześniej.
- Zmiana miejsca ceny: usuń domyślną akcję wyświetlającą cenę i dodaj własną w innym hooku w tej samej sekcji.
- Własny opis techniczny: użyj akcji po podsumowaniu produktu, aby wstawić blok specyfikacji. Zadbaj o to, by korzystał z aktualnego obiektu produktu i warunków (np. tylko dla kategorii „Elektronika”).
Pamiętaj, że te same hooki są używane przez motywy i wtyczki, więc kontroluj priorytety i usuwaj tylko te akcje, które naprawdę chcesz zastąpić.
Koszyk i zamówienie: walidacje, komunikaty i opłaty
W koszyku i kasie (checkout) hooki umożliwiają dodawanie walidacji, warunkowych opłat, modyfikacji adresów i treści podsumowania:
- Walidacja w koszyku: wykorzystaj filtr przetwarzający elementy koszyka, aby zablokować zakup niekompatybilnych produktów lub wymusić minimalną ilość.
- Dodatkowe opłaty: dopnij funkcję do akcji obliczającej opłaty, by dodać koszt pakowania, opłatę ekspresową lub zniżkę lojalnościową. Zadbaj o jednoznaczne tytuły, aby klient wiedział, za co płaci mniej lub więcej.
- Walidacja na kasie: wykorzystaj hook walidujący pola kasy, aby sprawdzać poprawność NIP-u, wymaganych pól B2B lub reguł regionalnych (np. ograniczenia dostawy).
- Komunikaty informacyjne: wstaw komunikat w podsumowaniu zamówienia, np. o terminie wysyłki lub konieczności potwierdzenia regulaminu dodatkowej usługi.
Lista produktów i archiwum: filtry danych i układ siatki
Strony kategorii/archiwów mają hooki pozwalające kontrolować banner nad listą, licznik produktów, kolejność sekcji czy dodatkowe badge przy miniaturach:
- Dodaj pasek filtrów nad produktami: podepnij akcję wyżej niż nagłówek listy, aby wyświetlić interaktywne kontrolki (np. zakres cen, rozmiar, kolor).
- Zmieniaj tytuły lub meta: użyj filtrów, by dodać oznaczenia „Bestseller”, „Nowość” lub skróty atrybutów do tytułu produktu.
- Kontroluj pętlę: znajdź filtry dotyczące argumentów zapytania (orderby, sortowanie) i dostosuj domyślną kolejność wyników do strategii sprzedażowej.
Maile transakcyjne: personalizacja treści i tematów
WooCommerce posiada ich wiele: potwierdzenie zamówienia, powiadomienia o zmianie statusu, reset hasła itp. Hooki w wiadomościach e-mail pozwalają:
- Zmienić temat lub preheader: użyj filtrów tytułów, aby wstawić dynamiczne elementy (np. numer zamówienia, imię klienta).
- Dodać blok z instrukcją użytkowania: akcja w treści maila umożliwi załączenie krótkiej instrukcji obsługi produktu cyfrowego lub link do panelu klienta.
- Personalizować stopkę: modyfikuj stopkę w zależności od kraju, języka lub kanału pozyskania klienta.
Panel administracyjny: automatyzacje i czyszczenie danych
W kokpicie hooki pomogą w walidacjach zarządzania zamówieniami, automatycznych powiadomieniach czy porządkowaniu metadanych:
- Dodawaj kolumny w liście zamówień: użyj filtrów kolumn, a następnie akcji do renderowania wartości (np. kraj dostawy, typ klienta, liczba zamówień).
- Automatyzacje statusów: dopnij akcję po utworzeniu zamówienia, aby przypisać status warunkowo (np. po weryfikacji płatności zewnętrznej).
- Czyszczenie danych: filtruj metadane przed zapisem, aby utrzymać spójność (np. format numerów, standaryzacja pól adresowych).
Zaawansowane techniki, kompatybilność i diagnostyka
Warunki kontekstowe i logika biznesowa
Hooki stają się potężne, gdy połączysz je z warunkami: czy to strona produktu, kategoria X, klient zalogowany, określona bramka płatności, koszyk powyżej progu, czy określony kanał sprzedaży. Korzystaj z warunków WooCommerce i WordPressa, aby ograniczać działania tylko do sytuacji, dla których zostały zaprojektowane. Dzięki temu skrócisz czas wykonywania i unikniesz niechcianych skutków ubocznych.
- Ograniczaj zasięg: uruchamiaj drogie operacje tylko, gdy to konieczne (np. gdy produkt ma określony tag „limitowany”).
- Konsekwencja w danych: filtry na wejściu i wyjściu powinny dbać o ten sam format (np. cena netto/brutto, waluta, separator dziesiętny).
Usuwanie i przenoszenie gotowych elementów
Często zamiast „doklejać” nowe sekcje, chcesz przestawić istniejące. Najpierw zidentyfikuj nazwę funkcji, którą WooCommerce lub motyw podpiął do danego hooka (np. funkcja drukująca cenę). Następnie usuń ją z oryginalnego punktu i podepnij do innego. Pamiętaj o tym samym priorytecie, jeśli chcesz zachować kolejność, lub zmień priorytet, by wyprzedzić inne elementy. Zadbaj, aby usunięcie akcji następowało po tym, jak została zarejestrowana — zwykle wymaga to odpalenia remove_action w odpowiednio późnym hooku inicjalizacyjnym.
Dynamiczne hooki WooCommerce
WooCommerce stosuje też dynamiczne nazwy hooków generowane w locie. Pozwalają dopasować się do wielu wariantów komponentów (np. w zależności od typu produktu lub sekcji). Jeśli widzisz wzorzec nazewniczy (prefiks + identyfikator), sprawdź w kodzie źródłowym, jak generowana jest finalna nazwa. To potężny mechanizm, który umożliwia tworzenie rozwiązań wielokrotnego użytku i uelastycznia architekturę.
Wydajność i ograniczanie kosztów
- Buforuj dane: jeżeli filtr wylicza coś kosztownego (np. zapytania do API), cache’uj wyniki na czas pojedynczego żądania lub krótkiego TTL.
- Unikaj zbędnych hooków: odpinaj funkcje w kontekście, gdzie ich nie potrzebujesz (np. panel administracyjny vs strona klienta).
- Minimalizuj liczbę zapytań do bazy: grupuj je i korzystaj z przygotowanych funkcji WooCommerce zamiast własnych powtórzeń.
- Mierz czas: profiluj krytyczne filtry, aby wiedzieć, które fragmenty spowalniają ładowanie strony produktu lub kasy.
Diagnostyka: jak sprawdzić, co i kiedy się uruchamia
Do wykrywania konfliktów i kolejności wykonania użyj prostych metod: logowanie do pliku, wyświetlanie znaczników w HTML tylko w środowisku testowym, profilowanie z pomocą wtyczek developerskich. Zanotuj nazwy hooków, priorytety i źródła podpięć. Jeżeli rezultat jest inny niż oczekiwany, sprawdź czy inni dostawcy (motyw, integracje płatności, SEO) nie zmieniają tego samego elementu z wyższym priorytetem.
- Audyt priorytetów: wypisz listę funkcji podpiętych do jednego hooka wraz z priorytetami i porównaj je z wymaganym porządkiem.
- Test A/B w stagingu: porównaj zachowanie po wyłączeniu podejrzanej wtyczki. Jeśli problem znika, odczytaj jej podpięcia i dostosuj swoje.
Kompatybilność z motywami i wtyczkami
Nie wszystkie motywy używają identycznej struktury hooków nad/pod głównymi sekcjami. Popularne motywy WooCommerce zwykle respektują standardowe akcje i filtry, ale mogą dodać własne. Zanim wdrożysz modyfikację, przejrzyj pliki motywu i ustal, czy nie istnieją alternatywne hooki specyficzne dla danego motywu. Podobnie z wtyczkami: integracja płatności czy dostaw może dostarczać własne filtry (np. do nadpisania etykiet). Najlepsza praktyka to opakować podpięcia w warunki sprawdzające aktywność danej wtyczki i wersję WooCommerce, aby uniknąć błędów, gdy komponent nie jest dostępny.
Strategia wdrożeń i kontrola jakości
- Przygotuj plan migracji: wdrażaj zmiany w etapach, zaczynając od środowiska testowego, przez staging, po produkcję.
- Checklisty: utwórz listę krytycznych ścieżek (dodanie do koszyka, kupony, płatności, e-maile), które testujesz po każdej zmianie hooków.
- Rejestr zmian: opisuj, które hooki zostały użyte i w jakim celu (z datą i wersją), aby każdy członek zespołu mógł szybko zrozumieć kontekst.
Przykładowe przepływy modyfikacji krok po kroku
Scenariusz 1: Dodanie ramki z informacją „Wysyłka w 24h” pod ceną produktu.
- Zidentyfikuj hook wyświetlający cenę w podsumowaniu produktu.
- Sprawdź, jaki ma priorytet domyślny elementów w tej sekcji.
- Podłącz własną funkcję do hooka uruchamianego tuż po cenie (z minimalnie większym priorytetem), aby dodać informację w odpowiednim miejscu.
- Ogranicz wyświetlanie do produktów dostępnych w magazynie (warunek stanów).
Scenariusz 2: Dodanie opłaty pakowania prezentowego w koszyku.
- Znajdź akcję odpowiedzialną za obliczanie opłat w koszyku.
- Podłącz funkcję dodającą nową pozycję kosztową z etykietą „Pakowanie na prezent”.
- Zastosuj warunek: opłata tylko przy produktach z kategorii „Prezenty” lub powyżej progu kwotowego.
- Przetestuj w koszyku i przy kasie, sprawdź poprawność podatku i waluty.
Scenariusz 3: Personalizacja tematu e-maila potwierdzającego zamówienie.
- Odszukaj filtr zmieniający temat wiadomości powitalnej do klienta.
- Zaimplementuj funkcję, która wstawi numer zamówienia i imię klienta na początku tematu.
- Sprawdź wygląd w różnych klientach poczty, aby uniknąć cięcia znaków specjalnych.
Najczęstsze błędy i jak ich unikać
- Brak zwrotu wartości w filtrze: zawsze zwracaj przetworzoną zmienną, inaczej wynik będzie pusty.
- Zły priorytet: jeśli Twoja modyfikacja „nie łapie”, sprawdź, czy nie uruchamia się za wcześnie lub za późno w kolejce.
- Niewłaściwa liczba argumentów: dopasuj liczbę przyjmowanych parametrów do dokumentacji hooka.
- Konflikty z motywem: wyłącz na chwilę motyw i przetestuj na domyślnym, aby potwierdzić, czy problem wynika z nadpisania hooków.
- Brak warunków: ograniczaj kod do właściwego kontekstu (strona, typ produktu, rola użytkownika), aby nie wprowadzać skutków ubocznych.
Utrzymanie i rozwój w dłuższej perspektywie
Hooki to kontrakt pomiędzy Twoim kodem a WooCommerce. Aby uniknąć niespodzianek po aktualizacjach: śledź zmiany w dzienniku wydania WooCommerce, sprawdzaj usunięte/oznaczone jako przestarzałe nazwy hooków i aktualizuj własne podpięcia. Dodaj testy funkcjonalne e2e dla ścieżek krytycznych sklepu i utrzymuj spójne nazewnictwo funkcji. W miarę rozwoju projektu wyodrębniaj logikę do klas, a rejestrację hooków centralizuj w jednym miejscu, co ułatwi audyt i refaktoryzację.
Na koniec pamiętaj: siłą hooków jest modularność. Kiedy implementujesz nowe pomysły, staraj się, aby każdy element był możliwie niezależny, posiadał jasno zdefiniowane wejście/wyjście i nie „wiedział” za wiele o innych fragmentach. Taka architektura pozwoli Ci szybko reagować na potrzeby biznesowe i jednocześnie utrzymać kod w dobrej kondycji przez długi czas.