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
numberpostseste 5. - Adaugi un filtru pe
posts_wheresaupre_get_postsși nu se aplică:get_posts()aresuppress_filters=true. Pune'suppress_filters' => falsedacă ai nevoie de filtre. - Folosești
the_title()sauthe_permalink()înforeachfărăsetup_postdata(): afișează datele articolului paginii, nu ale celui din listă. - Chemi
setup_postdata()și uițiwp_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ă.