WooCommerce

Personalizacja WooCommerce bez wtyczek — hooki, filtry i shortcode

Tekst
Spis treści

Każda kolejna wtyczka to licencja do opłacenia, aktualizacja do pilnowania i skrypty doładowywane na każdej podstronie. Tymczasem sporą część zmian w WooCommerce da się zrobić kilkunastoma linijkami kodu — bez instalowania czegokolwiek. Poniżej praktyczny przegląd: gdzie umieścić kod, jak działają hooki i filtry oraz gotowe fragmenty do najczęstszych zadań.

Gdzie umieszczać kod — i gdzie absolutnie nie

Zanim skopiujesz cokolwiek, jedna rzecz do ustalenia. Nigdy nie edytuj plików motywu nadrzędnego ani rdzenia WordPressa i WooCommerce. Pierwsza aktualizacja nadpisze zmiany i zostaniesz z pytaniem, dlaczego „coś przestało działać”.

Trzy poprawne miejsca:

MiejsceKiedy
functions.php motywu potomnegoZmiany związane z wyglądem i układem, powiązane z konkretnym motywem
Mała wtyczka własna (jeden plik w wp-content/plugins/)Zmiany funkcjonalne, które mają przetrwać zmianę motywu — rekomendowane
Wtyczka do fragmentów koduGdy nie masz dostępu przez FTP; wygodne, ale dokłada warstwę zależności

Zanim wgrasz cokolwiek na produkcję: kopia zapasowa i test na środowisku testowym. Pojedynczy błąd składni w PHP potrafi wywalić całą stronę — procedurę bezpiecznego wdrażania opisujemy przy aktualizacjach WordPressa.

Hook czy filtr — różnica w jednym zdaniu

Akcja (add_action) coś dodaje w określonym miejscu. Filtr (add_filter) coś zmienia po drodze.

// AKCJA — dopisuje treść w konkretnym punkcie strony produktu
add_action( 'woocommerce_before_add_to_cart_button', 'wsk_info_o_wysylce' );
function wsk_info_o_wysylce() {
    echo '<p class="wsk-wysylka">Wysyłka w 24 h przy zamówieniu do 14:00.</p>';
}

// FILTR — modyfikuje wartość, którą WooCommerce i tak by wyświetlił
add_filter( 'woocommerce_product_single_add_to_cart_text', 'wsk_tekst_przycisku' );
function wsk_tekst_przycisku() {
    return 'Zamawiam';
}

Nazwy funkcji zawsze poprzedzaj własnym prefiksem (tu: wsk_). Funkcja o nazwie info_o_wysylce prędzej czy później zderzy się z identyczną nazwą z jakiejś wtyczki i strona przestanie działać.

Mapa najważniejszych punktów zaczepienia

Warto znać kilkanaście miejsc, w których najczęściej coś się dodaje:

Strona produktuwoocommerce_before_single_product — na samej górze – woocommerce_single_product_summary — blok z tytułem, ceną i przyciskiem (kolejność ustala priorytet) – woocommerce_before_add_to_cart_button / woocommerce_after_add_to_cart_buttonwoocommerce_product_meta_end — pod kategoriami i tagami

Koszyk i zamówieniewoocommerce_before_cart / woocommerce_after_cart_tablewoocommerce_before_checkout_form — komunikat nad formularzem – woocommerce_review_order_before_submit — tuż nad przyciskiem płatności – woocommerce_thankyou — strona podziękowania

Listing produktówwoocommerce_before_shop_loop / woocommerce_after_shop_loopwoocommerce_before_shop_loop_item_title

Priorytet (trzeci argument add_action) decyduje o kolejności. Niższa liczba = wcześniej. Domyślnie 10.

Gotowe fragmenty do najczęstszych zadań

Dodanie pola NIP do zamówienia

Potrzebne przy fakturach dla firm — kontekst wdrożeniowy opisujemy w tekście o automatycznych fakturach w WooCommerce.

add_filter( 'woocommerce_checkout_fields', 'wsk_dodaj_nip' );
function wsk_dodaj_nip( $fields ) {
    $fields['billing']['billing_nip'] = array(
        'label'    => 'NIP (jeśli chcesz fakturę na firmę)',
        'required' => false,
        'class'    => array( 'form-row-wide' ),
        'priority' => 35,
    );
    return $fields;
}

Ukrycie pól, których nie potrzebujesz

Każde zbędne pole w koszyku to spadek liczby dokończonych zamówień — piszemy o tym szerzej przy porzuceniach koszyka.

add_filter( 'woocommerce_checkout_fields', 'wsk_usun_pola' );
function wsk_usun_pola( $fields ) {
    unset( $fields['billing']['billing_company'] );
    unset( $fields['billing']['billing_address_2'] );
    return $fields;
}

Darmowa dostawa od kwoty — komunikat motywujący

add_action( 'woocommerce_before_cart', 'wsk_do_darmowej_dostawy' );
function wsk_do_darmowej_dostawy() {
    $prog    = 200;
    $koszyk  = WC()->cart->get_displayed_subtotal();
    if ( $koszyk < $prog ) {
        $brakuje = wc_price( $prog - $koszyk );
        echo '<div class="woocommerce-info">Do darmowej dostawy brakuje ' . $brakuje . '.</div>';
    }
}

Zmiana liczby produktów w wierszu

add_filter( 'loop_shop_columns', 'wsk_kolumny' );
function wsk_kolumny() {
    return 4;
}

Ukrycie metody wysyłki dla wybranych produktów

Przydatne przy towarach gabarytowych, których nie wyśle kurier standardowy:

add_filter( 'woocommerce_package_rates', 'wsk_ukryj_metode', 10, 2 );
function wsk_ukryj_metode( $rates, $package ) {
    foreach ( $package['contents'] as $item ) {
        if ( has_term( 'gabaryt', 'product_cat', $item['product_id'] ) ) {
            unset( $rates['flat_rate:1'] ); // podmień na ID swojej metody
            break;
        }
    }
    return $rates;
}

Shortcode — kiedy nadal są przydatne

WooCommerce udostępnia zestaw shortcode’ów pozwalających wstawić produkty w dowolne miejsce — także w treść wpisu na blogu albo na stronie zbudowanej w Elementorze:

[products limit="8" columns="4" orderby="popularity"]
[products category="karma-sucha" limit="4"]
[products on_sale="true" limit="4"]
[product_page id="99"]
[add_to_cart id="99"]

Dwie uwagi praktyczne:

  • Koszyk i zamówienie mają dziś postać bloków, nie shortcode’ów. Starsze [woocommerce_cart] i [woocommerce_checkout] nadal działają dla zgodności wstecznej, ale nowe wdrożenia buduje się na blokach.
  • Strony koszyka, zamówienia i konta muszą być wykluczone z cache. To najczęstsza przyczyna sytuacji „klient widzi cudzy koszyk”.

Shortcode dobrze sprawdza się przy sprzedaży wplecionej w treść — np. artykuł poradnikowy z blokiem powiązanych produktów na końcu. To prosty sposób, żeby blog realnie pracował na sprzedaż.

Nadpisywanie szablonów — ostateczność, nie pierwszy wybór

WooCommerce pozwala skopiować plik szablonu do folderu woocommerce/ w motywie i tam go zmienić. Działa, ale ma poważną wadę: nadpisany szablon nie dostaje aktualizacji. Po większym wydaniu WooCommerce zobaczysz ostrzeżenie o nieaktualnych szablonach, a w gorszym scenariuszu — zepsuty układ.

Kolejność wyboru, od najlepszej:

  1. Ustawienie w panelu WooCommerce
  2. Hook lub filtr
  3. CSS
  4. Nadpisanie szablonu — tylko gdy pierwsze trzy zawiodły

Kiedy przestaje się to opłacać

Fragmenty kodu są świetne do pojedynczych zmian. Przestają być dobrym rozwiązaniem, gdy:

  • masz kilkadziesiąt snippetów i nikt nie pamięta, który co robi,
  • zmiana wymaga własnych tabel w bazie albo panelu ustawień,
  • kod musi działać identycznie na kilku sklepach,
  • pojawia się integracja z zewnętrznym systemem.

Wtedy właściwym krokiem jest uporządkowanie tego w dedykowaną wtyczkę — z dokumentacją i wersjonowaniem. Jeśli potrzebujesz wsparcia przy takim porządkowaniu albo przy nietypowej funkcji, zajmujemy się tym w ramach rozwiązań dedykowanych, a przy budowie nowego sklepu planujemy to od razu w projekcie sklepu WooCommerce.

[DO UZUPEŁNIENIA] — mocny akcent: przykład z Waszego wdrożenia, w którym zastąpienie kilku wtyczek własnymi snippetami skróciło czas ładowania. Konkretne milisekundy przed/po.

FAQ — hooki i personalizacja WooCommerce

Czy muszę umieć programować, żeby użyć tych fragmentów? Do skopiowania i podmiany wartości — nie. Do modyfikowania logiki i diagnozowania błędów — tak. Zasada bezpieczeństwa: jeśli nie rozumiesz, co robi dany fragment, nie wgrywaj go na produkcję bez testu.

Gdzie znaleźć listę wszystkich hooków WooCommerce? W oficjalnej dokumentacji dla deweloperów oraz w kodzie źródłowym wtyczki — nazwy hooków są tam widoczne przy każdym do_action i apply_filters. To najpewniejsze źródło, bo zawsze aktualne.

Czy hooki spowalniają sklep? Same w sobie nie. Spowalnia zła implementacja — np. zapytanie do bazy wykonywane w pętli produktów na stronie kategorii. Skutki wydajnościowe sprawdzisz w kontekście Core Web Vitals.

Co zrobić, gdy po wgraniu kodu strona wyświetla białą stronę? Usuń wgrany fragment przez FTP albo menedżer plików hostingu. Jeśli kod był w motywie potomnym — cofnij zmianę w functions.php. Włącz WP_DEBUG, żeby zobaczyć komunikat błędu zamiast pustej strony.

Czy zmiany przetrwają aktualizację WooCommerce? Hooki i filtry — zwykle tak, bo są częścią publicznego API i rzadko znikają. Nadpisane szablony — nie zawsze; wymagają przeglądu po większych wydaniach.

Autor: Adrian Kamiński — Websky Studio, Poznań. Projektant i developer — sklepy WooCommerce dostrajane kodem, nie stosem wtyczek.

Twoja opinia

Czy ten artykuł był pomocny?

Jedno kliknięcie — pomaga mi wybierać kolejne tematy.

Udostępnij artykuł

Newsletter Websky

Nowe wpisy prosto na maila.

Raz w miesiącu — konkrety o WordPressie, WooCommerce, SEO i AI. Zero spamu, wypisujesz się jednym kliknięciem.

  • Case studies z polskich wdrożeń
  • Checklisty i szablony do pobrania
  • Zmiany w Google i WordPressie w pigułce

Dane trafiają wyłącznie do Websky Studio. Wypisujesz się jednym kliknięciem w każdej wiadomości.

Sklep WooCommerce

Twój sklep może sprzedawać więcej.

Wdrożenia i optymalizacja WooCommerce: Przelewy24, InPost, BaseLinker, cenniki B2B i integracje z magazynem. Wycena w 24 h od briefu.

Wyceń sklep