Przejdź do treści
Pobieranie produktów WooCommerce z użyciem WP_Query: przykłady i pułapki

Pobieranie produktów WooCommerce z użyciem WP_Query: przykłady i pułapki

Opublikowano: 19 października 2026| Zaktualizowano: 19 października 2026

Własna lista produktów może wymagać innego zapytania niż katalog sklepu, który obsługuje już filtry i paginację WooCommerce. Wybór interfejsu wpływa także na to, jak kod będzie reagował na przyszłe zmiany sposobu przechowywania produktów.

Krótka odpowiedź

WP_Query pobiera produkty WooCommerce przez `post_type` ustawione na `product`, a warunki statusu, kategorii i liczby wyników przekazuje się w tablicy argumentów. Wyniki wyświetlaj przez obiekt produktu z `wc_get_product()` i metody WooCommerce.

W nowym kodzie rozszerzenia użyj `wc_get_products()` albo `WC_Product_Query`, ponieważ te interfejsy WooCommerce są przygotowane na zmiany warstwy danych.

Usługi KC Mobile

Potrzebujesz pomocy w tym temacie?

Czytasz poradnik „Pobieranie produktów WooCommerce z użyciem WP_Query: przykłady i pułapki”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.

Kiedy WP_Query nadaje się do pobierania produktów WooCommerce?

WP_Query nadaje się do niestandardowej listy, gdy widok korzysta z modelu wpisów WordPressa i nie ma zastępować katalogu sklepu. Produkt WooCommerce jest typem wpisu `product`, ale archiwum sklepu obsługuje też własne reguły widoczności, filtrowania i paginacji.

Dokumentacja WooCommerce zaleca `wc_get_products()` lub `WC_Product_Query` do pobierania produktów w kodzie motywów i rozszerzeń. Własne zapytanie `WP_Query` może wymagać zmian, gdy sposób przechowywania danych produktów zostanie zmodyfikowany.

Tabela pokazuje, kiedy użyć poszczególnych interfejsów. Wybór zależy od tego, czy potrzebujesz wpisów WordPressa, czy obiektów produktów zgodnych z API WooCommerce.

interfejsy pobierania produktów WooCommerce według zastosowania
InterfejsKiedy go użyćCo zwracaZgodność ze zmianami danych WooCommerce
`WP_Query`Własny widok oparty na wpisach WordPressaObiekty `WP_Post`Zależna od struktury wpisów i metadanych
`WC_Product_Query`Rozszerzenie pobierające produkty przez API WooCommerceObiekty `WC_Product` lub identyfikatoryObsługiwana przez warstwę WooCommerce
`wc_get_products()`Krótkie zapytanie w kodzie motywu lub rozszerzeniaObiekty `WC_Product` lub identyfikatoryObsługiwana przez warstwę WooCommerce

WP_Query sprawdza się w kontrolowanym widoku, a API WooCommerce jest właściwym wyborem dla nowego kodu, który pobiera katalog.

Czytasz poradnik „Pobieranie produktów WooCommerce z użyciem WP_Query: przykłady i pułapki”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny. Omów temat tego poradnika

Jak pobrać opublikowane produkty w podstawowym zapytaniu?

Podstawowe zapytanie pobiera produkty przez `post_type` ustawione na `product`, ogranicza status do `publish` i ustawia limit wyników. Pętla wywołuje `the_post()`, a po jej zakończeniu przywraca kontekst strony.

$args = array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => 12,
    'paged'          => max( 1, get_query_var( 'paged' ) ),
);

$products_query = new WP_Query( $args );

if ( $products_query->have_posts() ) {
    while ( $products_query->have_posts() ) {
        $products_query->the_post();

        $product = wc_get_product( get_the_ID() );
        if ( ! $product ) {
            continue;
        }

        echo '<h2>' . esc_html( $product->get_name() ) . '</h2>';
    }
}

wp_reset_postdata();

`wc_get_product()` może nie zwrócić obiektu, dlatego kod sprawdza wynik przed odczytaniem danych. `esc_html()` zabezpiecza tekst w HTML, a `wp_reset_postdata()` przywraca globalny kontekst głównego zapytania. Jeśli lista ma zastąpić lub uzupełnić katalog sklepu, sklepy internetowe na WooCommerce możemy zaprojektować z uwzględnieniem katalogu, filtrów i sposobu wyświetlania produktów.

Jak filtrować produkty po kategorii, cenie i dostępności?

Kategorię i tag produktu filtruje się przez `tax_query`, a wybrane metadane przez `meta_query`. Filtrowanie ceny oraz stanu magazynowego wymaga sprawdzenia sposobu przechowywania danych i konfiguracji sklepu.

Tabela pokazuje, jak dobrać warunek i co może ograniczyć wynik zapytania. Przy dużym katalogu zmierz koszt zapytania po metadanych na kopii sklepu z danymi podobnymi do produkcyjnych.

warunki WP_Query dla kategorii, ceny i dostępności produktów
Czego szukasz?Jakiego warunku użyć?Co może ograniczyć wynik?
Produktów z kategorii`tax_query` dla `product_cat`Błędny slug lub brak przypisania kategorii
Produktów z tagiem`tax_query` dla `product_tag`Tag nie jest przypisany do produktu
Produktów według własnego pola`meta_query` z kluczem i wartościąDuży zbiór metadanych może zwiększyć koszt zapytania
Produktów w przedziale ceny`meta_query` z polem ceny i porównaniem liczbowymFormat wartości, indeksowanie i sposób przechowywania cen
Produktów dostępnych w magazynieWarunek metadanych albo API WooCommerceProdukt wariantowy może wymagać sprawdzenia wariantów

Przykład filtrowania kategorii po slugu:

$args = array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => 12,
    'tax_query'      => array(
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => 'akcesoria',
        ),
    ),
);

$products_query = new WP_Query( $args );

Nie kopiuj warunku ceny ani dostępności bez sprawdzenia wersji WooCommerce i konfiguracji katalogu. Dokumentacja WordPressa opisuje `tax_query` jako sposób filtrowania po taksonomiach, a `meta_query` jako warunek dla metadanych wpisów.

Potrzebujesz pomocy w tym temacie?

Wolisz od razu porozmawiać? Zadzwoń: 604 939 140

Wysyłając formularz, zgadzasz się na przetwarzanie danych w celu kontaktu (polityka prywatności). Odpowiadamy w 24h.

Jak poprawnie wyświetlać dane produktu w pętli?

Dane produktu odczytuj przez metody obiektu `WC_Product`, który zwraca `wc_get_product()`. Obiekt udostępnia nazwę, cenę, adres produktu i dostępność, a metody WooCommerce uwzględniają typ produktu.

$product = wc_get_product( get_the_ID() );

if ( $product ) {
    $name      = $product->get_name();
    $price     = $product->get_price_html();
    $url       = $product->get_permalink();
    $available = $product->is_in_stock();

    echo '<a href="' . esc_url( $url ) . '">';
    echo esc_html( $name );
    echo '</a>';
    echo wp_kses_post( $price );
    echo $available ? 'Produkt dostępny' : 'Produkt niedostępny';
}

Adres przekazuj przez `esc_url()`, tekst przez `esc_html()`, a HTML ceny przez `wp_kses_post()`, ponieważ format ceny może zawierać znaczniki. Nie zakładaj, że każdy wynik ma cenę lub jest dostępny. Dla produktu wariantowego ustal, czy widok ma pokazać produkt nadrzędny, czy konkretne warianty.

Jak obsłużyć paginację i przywrócić globalny kontekst WordPressa?

Paginację własnego zapytania obsługuje argument `paged`, a po pętli przywraca się kontekst funkcją `wp_reset_postdata()`. Wartość `paged` powinna odpowiadać numerowi strony dla danego widoku.

Na archiwum sklepu nie duplikuj głównego zapytania tylko po to, by wyświetlić produkty. Dodatkowa pętla może mieć oddzielną paginację, ale wtedy trzeba utrzymać spójne adresy stron oraz liczbę stron wyników. Najpierw sprawdź, czy główne archiwum nie dostarcza już właściwych produktów.

`wp_reset_postdata()` przywraca kontekst wpisu po dodatkowej pętli. Bez resetu tytuł, link lub inny tag szablonu może pobrać dane ostatniego produktu zamiast bieżącej strony.

Kiedy zamiast WP_Query użyć WC_Product_Query?

Użyj `WC_Product_Query` albo `wc_get_products()`, gdy nowy kod motywu lub rozszerzenia ma pobierać katalog przez API WooCommerce. Dokumentacja WooCommerce wskazuje te interfejsy jako odporniejsze na zmiany sposobu przechowywania danych.

$products = wc_get_products( array(
    'status'   => 'publish',
    'limit'    => 12,
    'category' => array( 'akcesoria' ),
    'return'   => 'objects',
) );

foreach ( $products as $product ) {
    echo esc_html( $product->get_name() );
}

`wc_get_products()` jest skrótem do pobierania wyników przez `WC_Product_Query`. Argumenty obejmują między innymi limit, kategorię, tag, status i typ zwracanych danych. Przed wdrożeniem sprawdź dokumentację używanej wersji WooCommerce, ponieważ dostępne kryteria mogą się różnić między wersjami.

Porównanie pokazuje różnice między WP_Query a API WooCommerce, pomagając dobrać sposób pobierania produktów do widoku i kodu.

Jak uniknąć błędów wydajności i niezgodności?

Ograniczenie liczby wyników i unikanie kosztownych filtrów metadanych zmniejsza ryzyko wolnych zapytań. Duży katalog testuj na stagingu, czyli kopii sklepu przeznaczonej do sprawdzania zmian przed wdrożeniem.

Zalecamy sprawdzić następujące elementy:
- ustaw limit wyników i paginację zamiast pobierać cały katalog;
- nie uruchamiaj drugiego zapytania katalogowego, jeśli główne archiwum już dostarcza potrzebne produkty;
- ogranicz `meta_query`, zwłaszcza dla pól bez indeksu;
- używaj metod `WC_Product` do wyświetlania ceny i dostępności;
- sprawdź produkty proste, wariantowe i ukryte z katalogu;
- po aktualizacji WooCommerce przetestuj własne rozszerzenie na kopii sklepu.

Jeśli potrzebujesz architektury sklepu uwzględniającej własne widoki katalogu i logikę zapytań, projekt i wdrożenie sklepu WooCommerce możemy dopasować do struktury produktów oraz procesów sprzedaży.

Jak sprawdzić, czy zapytanie zwraca właściwe produkty?

Diagnostykę pustych lub niepełnych wyników zacznij od statusu, kategorii, widoczności katalogowej i numeru strony. Produkt może mieć status opublikowany, a mimo to nie być widoczny w katalogu lub w danym języku sklepu.

1. Sprawdź `post_type` i `post_status`, a następnie potwierdź status testowego produktu.
2. Usuń na chwilę `tax_query` i `meta_query`, aby ustalić, czy wynik odcina warunek.
3. Zweryfikuj slug kategorii, przypisanie produktu i widoczność katalogową.
4. Ustaw małą wartość `posts_per_page` i sprawdź `paged` na kolejnej stronie.
5. Przetestuj osobno produkt prosty i wariantowy, a wyniki porównaj z panelem sklepu.
6. Jeśli sklep działa w kilku językach, sprawdź konfigurację wtyczki wielojęzycznej.

Z naszych wdrożeń wynika, że dodawanie warunków pojedynczo szybciej wskazuje przyczynę pustych wyników niż jednoczesna zmiana wielu argumentów. Przy filtrowaniu katalogu sprawdź także zasady filtrowania produktów WooCommerce, aby własne zapytanie nie omijało logiki sklepu. Szerszy opis typów i wariantów zawiera przewodnik o produktach WooCommerce i ich konfiguracji.

Więcej poradników w tym temacie

Wspomniane narzędzia

WP_Querywc_get_product()WC_Product_Querywc_get_products()wp_reset_postdata()esc_html()esc_url()wp_kses_post()

Najczęściej zadawane pytania

Jak pobrać produkty WooCommerce za pomocą WP_Query?
Utwórz tablicę argumentów z `post_type` ustawionym na `product`, `post_status` na `publish` i ograniczoną wartością `posts_per_page`. Przejdź przez wyniki pętlą, pobierz obiekt przez `wc_get_product()` i po pętli przywróć kontekst funkcją `wp_reset_postdata()`.
Jak wyświetlić produkty z konkretnej kategorii w WP_Query?
Dodaj `tax_query` z taksonomią `product_cat`, polem `slug` i slugiem kategorii w `terms`. Sprawdź, czy produkt jest przypisany do tej kategorii i czy slug zgadza się z wartością w panelu.
Jak pobrać tylko produkty opublikowane i dostępne w WooCommerce?
Ustaw `post_status` na `publish`, a dostępność sprawdź metodą `$product->is_in_stock()` po pobraniu obiektu WooCommerce. Przy produktach wariantowych ustal, czy wynik ma dotyczyć produktu nadrzędnego, czy poszczególnych wariantów.
Czy WP_Query działa z produktami wariantowymi WooCommerce?
WP_Query może pobierać wpisy produktów, ale warianty mają osobny typ wpisu i relację z produktem nadrzędnym. Jeśli potrzebujesz listy wariantów, jawnie zaplanuj typ wyników i sprawdź, czy widok nie powinien korzystać z obiektu produktu WooCommerce.
Kiedy użyć WC_Product_Query zamiast WP_Query?
Wybierz `WC_Product_Query` lub `wc_get_products()`, gdy kod rozszerzenia pobiera produkty przez warstwę danych WooCommerce. Dokumentacja WooCommerce zaleca te interfejsy ze względu na zgodność z przyszłymi zmianami przechowywania produktów.
Dlaczego WP_Query nie zwraca produktów WooCommerce?
Sprawdź kolejno `post_type`, status wpisu, slug i przypisanie kategorii, widoczność katalogową oraz numer strony w `paged`. Usuń warunki filtrujące i dodawaj je pojedynczo, aby znaleźć ten, który odcina wyniki.
#WooCommerce#WP_Query#WordPress#PHP#produkty WooCommerce#WC_Product_Query#wc_get_products#optymalizacja sklepu
Zdjęcie autora: Krzysztof Czapnik
O autorze

Krzysztof Czapnik

Founder & Technical Lead, KC Mobile

Projektuję i rozwijam strony WordPress, sklepy WooCommerce oraz aplikacje internetowe. Łączę projektowanie z programowaniem, integracjami i technicznym SEO. Projekty KC Mobile prowadzę osobiście.

Potrzebujesz pomocy z tym tematem? Napisz - odpowiem osobiście w 24h.

Potrzebujesz pomocy w tym temacie?

Czytasz poradnik „Pobieranie produktów WooCommerce z użyciem WP_Query: przykłady i pułapki”. Napisz, co chcesz zrobić i na jakim etapie jesteś. Ustalimy, czy możemy pomóc i jaki zakres prac będzie potrzebny.