get_posts în WordPress

Interogări și bucla WordPress 1.2

Întoarce un tablou de articole după aceleași argumente ca WP_Query, fără să atingă bucla principală.

Sintaxă
get_posts( array|string $args = null ): WP_Post[]|int[]

Ce face get_posts

get_posts() creează intern un WP_Query și întoarce direct tabloul de articole (obiecte WP_Post sau ID-uri). E potrivită când vrei doar o listă pe care o parcurgi cu foreach, fără bucla clasică have_posts() / the_post().

Are câteva valori implicite diferite față de WP_Query: aduce 5 articole (numberposts), suppress_filters este true (filtrele de interogare nu se aplică), iar ignore_sticky_posts și no_found_rows sunt forțate la true. Nu modifică interogarea principală.

Pentru că nu umple variabila globală $post, în foreach trimite obiectul ca argument: get_the_title( $p ), get_permalink( $p ). Dacă preferi funcțiile fără argument, chemi setup_postdata( $post ) după ce setezi global $post și wp_reset_postdata() la final.

Parametri

Parametru Descriere
numberposts Câte articole; alias pentru posts_per_page. Implicit 5; -1 pentru toate.
category ID-ul categoriei sau ID-uri separate prin virgulă (include subcategoriile); alias pentru cat.
include Tablou de ID-uri de adus; alias pentru post__in.
exclude Tablou de ID-uri de exclus; ignorat când este setat include.
suppress_filters Dacă filtrele de interogare se ignoră. Implicit true.
post_type, orderby, order, meta_query... Orice argument acceptat de WP_Query. Implicit post_type = 'post', orderby = 'date', order = 'DESC'.

Ce returnează

Un tablou de obiecte WP_Post (sau de ID-uri cu 'fields' => 'ids'). Dacă nu se potrivește nimic, un tablou gol.

Exemple

Exemplul 1: Ultimele 3 rețete, cu foreach

Obiectul articolului se trimite funcțiilor get_the_title() și get_permalink(), deci nu e nevoie de setup_postdata().

<?php
$retete = get_posts( array(
    'numberposts'   => 3,
    'category_name' => 'retete',
) );

echo '<ul>';
foreach ( $retete as $p ) {
    printf(
        '<li><a href="%s">%s</a></li>',
        esc_url( get_permalink( $p ) ),
        esc_html( get_the_title( $p ) )
    );
}
echo '</ul>';

Ce afișează pagina

<ul><li><a href="https://exemplu.ro/placinta-cu-mere/">Plăcintă cu mere</a></li><li><a href="https://exemplu.ro/ciorba-de-perisoare/">Ciorbă de perișoare</a></li><li><a href="https://exemplu.ro/papanasi/">Papanași</a></li></ul>

Exemplul 2: Doar ID-urile paginilor, din terminal

Cu 'fields' => 'ids' primești numere, nu obiecte: util când vrei doar să le procesezi mai departe.

wp eval 'print_r( get_posts( array( "post_type" => "page", "numberposts" => -1, "fields" => "ids" ) ) );'

Ieșire în terminal

Array
(
    [0] => 128
    [1] => 97
    [2] => 64
)

Greșeli frecvente

  • Te aștepți să primești toate articolele: implicit numberposts este 5.
  • Adaugi un filtru pe posts_where sau pre_get_posts și nu se aplică: get_posts() are suppress_filters = true. Pune 'suppress_filters' => false dacă ai nevoie de filtre.
  • Folosești the_title() sau the_permalink() în foreach fără setup_postdata(): afișează datele articolului paginii, nu ale celui din listă.
  • Chemi setup_postdata() și uiți wp_reset_postdata() la final.

Comenzi înrudite

  • WP_Query: Clasa care interoghează articole, pagini și tipuri personalizate după criterii: tip, categorie, câmpuri, ordine, paginare.
  • have_posts / the_post: Bucla WordPress (The Loop): have_posts() verifică dacă mai sunt articole, the_post() îl pregătește pe următorul.
  • get_the_title: get_the_title() întoarce titlul unui articol; the_title() îl afișează direct în buclă, cu text opțional înainte și după.
  • get_permalink: get_permalink() întoarce adresa permanentă a unui articol sau a unei pagini; the_permalink() o afișează escapată.