Czym jest funkcja get_posts w WordPressie i jak jej używać do tworzenia list postów PHP?

wordpress get posts

Funkcja get_posts w WordPress pozwala pobierać wpisy, strony, załączniki oraz własne typy treści według określonych kryteriów. Dzięki niej można tworzyć listy najnowszych artykułów, wpisów z jednej kategorii, treści konkretnego autora, popularnych publikacji lub elementów powiązanych z niestandardowymi polami. To jedno z praktyczniejszych narzędzi dla osób, które chcą elastycznie zarządzać treścią bez ręcznego wybierania wpisów.

Największą zaletą get_posts jest prostota. Wystarczy przygotować tablicę argumentów, przekazać ją do funkcji, a następnie przejść po wynikach za pomocą pętli. WordPress sam zamienia parametry na bezpieczne zapytanie do bazy danych i zwraca tablicę obiektów wpisów. To sprawia, że funkcja dobrze sprawdza się zarówno w prostych widżetach, jak i w bardziej zaawansowanych sekcjach opartych na własnych typach treści, taksonomiach oraz polach meta.

Streszczenie artykułu:

  • get_posts pobiera wpisy, strony i własne typy treści według podanych parametrów.
  • Funkcja korzysta z mechanizmu WP_Query, ale jest wygodniejsza do prostych list wpisów.
  • Domyślnie zwraca 5 najnowszych opublikowanych wpisów.
  • Wynikiem działania funkcji jest tablica obiektów WP_Post lub identyfikatorów.
  • Najczęstsze zastosowania to listy wpisów z kategorii, wpisy autora, popularne treści i zapytania po polach meta.
  • Przy bardziej rozbudowanych zapytaniach warto używać tax_query oraz meta_query.

Ten artykuł jest przeznaczony dla twórców stron WordPress, programistów PHP, administratorów serwisów oraz osób rozwijających własne motywy, wtyczki lub sekcje treści. Przyda się szczególnie wtedy, gdy standardowe bloki i widżety nie dają wystarczającej kontroli nad tym, jakie wpisy mają pojawić się na stronie.

Czym jest funkcja get_posts w WordPress?

get_posts to funkcja WordPress, która pobiera z bazy danych wpisy spełniające określone warunki. Mogą to być zwykłe wpisy blogowe, strony, załączniki oraz własne typy treści. Z perspektywy bazy danych wiele z tych elementów znajduje się w tabeli wp_posts, a ich rodzaj określa między innymi pole post_type.

Funkcja przyjmuje tablicę argumentów lub ciąg zapytania. Na tej podstawie WordPress buduje zapytanie i zwraca pasujące elementy. W typowym użyciu najpierw definiuje się parametry, a potem przekazuje je do funkcji.

$args = array(
    'numberposts' => 5,
    'post_type'   => 'post',
);

$posts = get_posts( $args );

Bez dodatkowych ustawień get_posts zwraca najnowsze opublikowane wpisy. Domyślna liczba wyników to 5, co często zaskakuje początkujących użytkowników. Aby pobrać inną liczbę wpisów, należy użyć parametru numberposts albo posts_per_page.

Wynikiem działania funkcji jest najczęściej tablica obiektów WP_Post. Każdy obiekt zawiera dane wpisu, takie jak identyfikator, tytuł, autor, data publikacji, treść, status, typ wpisu oraz liczba komentarzy. Dzięki temu można łatwo wyświetlić wybrane informacje w dowolnym miejscu motywu lub wtyczki.

Jak działa get_posts i czym różni się od WP_Query?

Funkcja get_posts korzysta z klasy WP_Query, ale upraszcza jej użycie w sytuacjach, w których potrzebna jest zwykła lista wpisów. Zamiast tworzyć pełny obiekt zapytania, przekazuje się argumenty do funkcji i otrzymuje gotową tablicę wyników.

To dobre rozwiązanie, gdy chcesz wyświetlić kilka wpisów w stopce, bocznym panelu, sekcji z polecanymi artykułami lub we własnym shortcode. Kod jest krótszy, a ryzyko przypadkowego naruszenia głównej pętli WordPress jest mniejsze.

WP_Query daje większą kontrolę i lepiej sprawdza się przy pełnych widokach archiwów, niestandardowych pętlach oraz bardziej złożonych strukturach strony. get_posts jest natomiast wygodne, gdy celem jest szybkie pobranie danych i wyświetlenie ich w określonym miejscu.

Warto pamiętać, że get_posts ustawia ignore_sticky_posts oraz no_found_rows na true. Oznacza to, że funkcja ignoruje przyklejone wpisy i nie oblicza pełnej liczby wyników. Dzięki temu jest lekka, ale nie będzie najlepszym wyborem do paginowanych list, w których trzeba znać całkowitą liczbę stron.

Jakie parametry get_posts warto znać?

Największa siła get_posts tkwi w parametrach. To one decydują, które wpisy zostaną pobrane, w jakiej kolejności będą zwrócone i jakie typy treści zostaną uwzględnione. W prostych przypadkach wystarczy kilka argumentów, ale funkcja pozwala też budować bardzo precyzyjne zapytania.

Polecane:  Error establishing a database connection w WordPress - jak naprawić błąd?

Najważniejsze parametry to:

  • numberposts określa liczbę pobieranych wpisów.
  • post_type wskazuje typ treści, na przykład post, page lub własny typ.
  • post_status pozwala pobierać wpisy opublikowane, szkice lub treści prywatne.
  • category pobiera wpisy z wybranej kategorii po identyfikatorze.
  • include pozwala pobrać tylko konkretne wpisy po ID.
  • exclude wyklucza wskazane wpisy z wyników.
  • orderby określa kryterium sortowania.
  • order ustawia kierunek sortowania jako ASC lub DESC.
  • suppress_filters decyduje, czy filtry mają być pomijane.

Przykład pobierania 10 najnowszych wpisów wygląda bardzo prosto.

$args = array(
    'numberposts' => 10,
    'orderby'     => 'date',
    'order'       => 'DESC',
);

$latest_posts = get_posts( $args );

Jeżeli chcesz pobrać wszystkie wpisy pasujące do warunku, możesz ustawić numberposts na -1. Trzeba jednak robić to ostrożnie, szczególnie na dużych stronach, ponieważ pobieranie zbyt wielu rekordów może obciążyć bazę danych.

Parametr Zastosowanie Przykładowa wartość
numberposts Liczba wpisów do pobrania 10
post_type Typ treści product
category ID kategorii 4
orderby Pole sortowania comment_count
order Kierunek sortowania DESC
meta_key Klucz pola własnego featured

Jak wyświetlić dane zwrócone przez get_posts?

Po pobraniu wpisów trzeba przejść po tablicy wyników. Najczęściej używa się do tego pętli foreach. Każdy element tablicy jest obiektem, dlatego do tytułu, identyfikatora lub treści można odwoływać się przez właściwości obiektu.

$args = array(
    'numberposts' => 5,
);

$posts = get_posts( $args );

if ( ! empty( $posts ) ) {
    echo '<ul>';

    foreach ( $posts as $post ) {
        echo '<li>';
        echo '<a href="' . get_permalink( $post->ID ) . '">';
        echo esc_html( $post->post_title );
        echo '</a>';
        echo '</li>';
    }

    echo '</ul>';
}

W tym przykładzie funkcja pobiera 5 najnowszych wpisów, a następnie wyświetla ich tytuły jako linki. Do pobrania adresu URL wpisu używa się funkcji get_permalink, ponieważ sam obiekt WP_Post nie przechowuje gotowego linku w takiej formie.

Jeżeli korzystasz z funkcji szablonowych takich jak the_title, the_permalink lub the_content, warto użyć setup_postdata. Po zakończeniu pętli trzeba wtedy wywołać wp_reset_postdata, aby przywrócić globalny kontekst wpisu.

global $post;

$posts = get_posts( array(
    'numberposts' => 3,
) );

foreach ( $posts as $post ) {
    setup_postdata( $post );

    the_title( '<h3>', '</h3>' );
    the_excerpt();
}

wp_reset_postdata();

To szczególnie ważne, gdy kod działa wewnątrz szablonu strony, na której istnieje już główna pętla WordPress. Reset danych pomaga uniknąć błędów w kolejnych sekcjach strony.

Jak pobierać wpisy z kategorii, autora i typu treści?

Jednym z najczęstszych zastosowań get_posts jest pobieranie wpisów z konkretnej kategorii. Można to zrobić przez parametr category, gdy znasz ID kategorii. Przy większych projektach często wygodniejsze bywa używanie parametrów znanych z WP_Query, takich jak category_name albo category__in.

$args = array(
    'numberposts' => 6,
    'category'    => 3,
    'orderby'     => 'date',
    'order'       => 'DESC',
);

$category_posts = get_posts( $args );

Podobnie można pobierać wpisy konkretnego autora. Parametr author przyjmuje identyfikator użytkownika. Jeżeli chcesz pobrać wpisy kilku autorów, możesz użyć listy identyfikatorów lub parametru author__in.

$args = array(
    'numberposts' => -1,
    'author'      => 2,
);

$author_posts = get_posts( $args );

Funkcja dobrze obsługuje także własne typy treści. Jeżeli strona ma typ book, movie, portfolio lub product, można wskazać go przez post_type. To pozwala tworzyć osobne listy produktów, realizacji, recenzji albo wydarzeń.

$args = array(
    'numberposts' => 8,
    'post_type'   => 'portfolio',
    'post_status' => 'publish',
);

$items = get_posts( $args );

Taki kod można wykorzystać w szablonie strony głównej, sekcji z ostatnimi realizacjami lub w niestandardowym bloku. Dzięki temu treść pozostaje zarządzana z panelu WordPress, a kod tylko decyduje, jak i gdzie ją pokazać.

Jak używać tax_query i meta_query?

Przy prostych kategoriach wystarczą podstawowe parametry. Gdy jednak pracujesz z własnymi taksonomiami, lepiej używać tax_query. To mechanizm pozwalający filtrować treści po taksonomii, polu oraz terminie.

$args = array(
    'post_type' => 'book',
    'tax_query' => array(
        array(
            'taxonomy' => 'book_category',
            'field'    => 'slug',
            'terms'    => 'fantasy',
        ),
    ),
);

$books = get_posts( $args );

W tym przykładzie pobierane są wpisy typu book, które należą do terminu fantasy w taksonomii book_category. To rozwiązanie jest czytelne i elastyczne, szczególnie wtedy, gdy własny typ treści ma kilka sposobów klasyfikacji.

Polecane:  Strona internetowa fundacji - co powinna zawierać?

Do filtrowania po polach własnych służy meta_query. Możesz dzięki temu pobierać wpisy z konkretną ceną, rokiem publikacji, statusem wyróżnienia lub inną wartością zapisaną w metadanych.

$args = array(
    'post_type'  => 'product',
    'meta_query' => array(
        array(
            'key'     => 'featured',
            'value'   => 'yes',
            'compare' => '=',
        ),
    ),
);

$featured_products = get_posts( $args );

W bardziej zaawansowanych przypadkach można połączyć kilka warunków. Parametr relation określa, czy wszystkie warunki muszą być spełnione, czy wystarczy jeden z nich.

$args = array(
    'post_type'  => 'book',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'     => 'year_published',
            'value'   => 2010,
            'type'    => 'numeric',
            'compare' => '>',
        ),
        array(
            'key'     => 'price',
            'value'   => array( 10, 50 ),
            'type'    => 'numeric',
            'compare' => 'BETWEEN',
        ),
    ),
);

$books = get_posts( $args );

To dobry sposób na tworzenie list produktów w wybranym przedziale cenowym, wydarzeń po konkretnej dacie lub wpisów spełniających kilka warunków biznesowych.

Jak sortować wyniki get_posts?

Sortowanie wyników odbywa się przez parametry orderby oraz order. Najczęściej sortuje się wpisy po dacie, tytule, liczbie komentarzy, identyfikatorze, kolejności menu albo losowo. Warto dobrać kryterium do celu konkretnej sekcji.

Przykład listy popularnych wpisów opartych na liczbie komentarzy wygląda tak.

$args = array(
    'numberposts' => 10,
    'orderby'     => 'comment_count',
    'order'       => 'DESC',
);

$popular_posts = get_posts( $args );

Wpisy można też sortować alfabetycznie po tytule. Taki układ bywa przydatny w katalogach, bazach wiedzy, listach autorów lub archiwach.

$args = array(
    'numberposts' => -1,
    'orderby'     => 'title',
    'order'       => 'ASC',
);

$alphabetical_posts = get_posts( $args );

Jeżeli używasz include, możesz zachować własną kolejność przekazanych identyfikatorów przez orderby ustawione na post__in. To przydatne wtedy, gdy redaktor ręcznie wybiera konkretne wpisy i chce wyświetlić je w ustalonej kolejności.

$args = array(
    'include' => array( 12, 8, 25 ),
    'orderby' => 'post__in',
);

$selected_posts = get_posts( $args );

Sortowanie może również korzystać z nazwanych klauzul w meta_query. Dzięki temu można filtrować wpisy po polach własnych i jednocześnie sortować je według konkretnej wartości liczbowej, na przykład ceny lub roku publikacji.

Kiedy używać get_posts, a kiedy wybrać inne rozwiązanie?

get_posts najlepiej sprawdza się w prostych i średnio złożonych listach wpisów. To dobry wybór, gdy potrzebujesz pobrać niewielką liczbę elementów, wyświetlić linki do artykułów, stworzyć sekcję polecanych treści albo wygenerować listę elementów własnego typu treści.

Nie zawsze jednak jest to najlepsze narzędzie. Przy widokach z paginacją, rozbudowanych archiwach i pełnej kontroli nad pętlą często lepszy będzie bezpośredni WP_Query. Gdy chcesz zmienić główne zapytanie WordPress przed jego wykonaniem, właściwym rozwiązaniem jest hak pre_get_posts.

W praktyce warto kierować się prostą zasadą. Jeżeli potrzebujesz dodatkowej listy treści w wybranym miejscu strony, użyj get_posts. Jeżeli budujesz główny widok archiwum, listing z paginacją albo modyfikujesz główne zapytanie, wybierz WP_Query lub pre_get_posts.

Dobre praktyki przy pracy z get_posts:

  • Ustawiaj konkretną liczbę wyników zamiast pobierać wszystko bez potrzeby.
  • Filtruj po post_status, gdy potrzebujesz treści innych niż opublikowane.
  • Używaj esc_html i podobnych funkcji przy wyświetlaniu danych.
  • Stosuj wp_reset_postdata, gdy używasz setup_postdata.
  • Testuj złożone zapytania na środowisku testowym przed wdrożeniem.
Polecane:  Chatbot AI WordPress - jak wybrać najlepszą wtyczkę?

Takie podejście zmniejsza ryzyko problemów z wydajnością i poprawia bezpieczeństwo kodu. Jest szczególnie ważne na stronach z dużą liczbą wpisów, produktów lub własnych typów treści.

wordpress get posts

Jak stworzyć shortcode z get_posts?

Shortcode pozwala wyświetlić listę wpisów w treści strony lub artykułu bez edytowania szablonu. To wygodne rozwiązanie dla redaktorów, ponieważ mogą wstawić prosty znacznik tam, gdzie lista ma się pojawić.

Poniższy przykład tworzy shortcode [custom_posts], który wyświetla kilka najnowszych wpisów.

function custom_posts_shortcode( $atts ) {
    $atts = shortcode_atts(
        array(
            'numberposts' => 5,
            'post_type'   => 'post',
        ),
        $atts,
        'custom_posts'
    );

    $posts = get_posts( array(
        'numberposts' => intval( $atts['numberposts'] ),
        'post_type'   => sanitize_key( $atts['post_type'] ),
        'post_status' => 'publish',
    ) );

    if ( empty( $posts ) ) {
        return '<p>Brak wpisów do wyświetlenia.</p>';
    }

    $output = '<ul>';

    foreach ( $posts as $post ) {
        $output .= '<li>';
        $output .= '<a href="' . esc_url( get_permalink( $post->ID ) ) . '">';
        $output .= esc_html( $post->post_title );
        $output .= '</a>';
        $output .= '</li>';
    }

    $output .= '</ul>';

    return $output;
}

add_shortcode( 'custom_posts', 'custom_posts_shortcode' );

Po dodaniu kodu do własnej wtyczki lub pliku motywu potomnego można użyć shortcode w edytorze WordPress.

[custom_posts numberposts="3" post_type="post"]

W bardziej zaawansowanej wersji shortcode może przyjmować kategorię, typ treści, taksonomię, minimalną cenę lub inne parametry. Warto jednak walidować i oczyszczać dane wejściowe, ponieważ atrybuty shortcode są podawane przez użytkownika.

Podsumowanie

Funkcja get_posts to praktyczne i elastyczne narzędzie do pobierania treści w WordPress. Pozwala szybko tworzyć listy najnowszych wpisów, treści autora, wpisów z kategorii, elementów własnego typu treści oraz wyników filtrowanych po taksonomiach i polach meta. Jej największą zaletą jest prosta składnia, która pozwala osiągnąć dużo bez budowania pełnej instancji WP_Query.

Najlepiej używać jej wtedy, gdy potrzebna jest dodatkowa lista treści w konkretnym miejscu strony. Przy bardziej złożonych widokach, paginacji i modyfikowaniu głównego zapytania lepszym wyborem będzie WP_Query lub pre_get_posts. Dobrze napisany kod powinien ograniczać liczbę wyników, filtrować tylko potrzebne dane, zabezpieczać wyświetlane wartości i resetować dane wpisu po użyciu funkcji szablonowych. Dzięki temu get_posts może być szybkim, czytelnym i bezpiecznym sposobem na budowanie dynamicznych sekcji w WordPress.

FAQ – Najczęściej zadawane pytania

Co zwraca funkcja get_posts?

Funkcja get_posts zwraca tablicę obiektów WP_Post. Po użyciu parametru fields może zwrócić także tablicę identyfikatorów wpisów.

Ile wpisów zwraca get_posts domyślnie?

Domyślnie get_posts zwraca 5 wpisów. Liczbę wyników można zmienić przez parametr numberposts albo posts_per_page.

Czy get_posts pobiera tylko wpisy blogowe?

Nie. Funkcja może pobierać wpisy, strony, załączniki oraz własne typy treści. Decyduje o tym parametr post_type.

Czym różni się get_posts od WP_Query?

get_posts jest prostszym sposobem pobierania list wpisów i sprawdza się w dodatkowych sekcjach strony. WP_Query daje większą kontrolę i lepiej pasuje do głównych pętli oraz widoków z paginacją.

Czy get_posts nadaje się do paginacji?

Nie jest najlepszym wyborem do paginacji, ponieważ domyślnie ustawia no_found_rows na true. Do paginowanych list zwykle lepiej użyć WP_Query.

Jak pobrać wszystkie wpisy przez get_posts?

Można ustawić numberposts na -1. Na dużych stronach należy używać tego ostrożnie, ponieważ pobranie zbyt wielu wpisów może obciążyć bazę danych.

Jak pobrać wpisy z własnego typu treści?

Wystarczy ustawić parametr post_type na nazwę własnego typu treści, na przykład portfolio, book albo product.

Czy get_posts może filtrować po polach własnych?

Tak. Do prostych filtrów służą meta_key, meta_value i meta_compare. Do bardziej złożonych warunków najlepiej użyć meta_query.

Meta title: WordPress get_posts – poradnik i przykłady

Meta description: Poznaj funkcję WordPress get_posts, jej parametry, przykłady użycia oraz dobre praktyki tworzenia list wpisów, stron i typów własnych w PHP.

Przewijanie do góry