Cum să folosesc wp_get_recent_posts în WordPress?
Încerc să afișez titlul și rezumatul celor mai recente 8 postări în bara laterală.
Am o listă unde:
- Toate elementele se leagă la cea mai veche postare
- Toate titlurile sunt "număr ID al postării care ar trebui afișată" + "titlul celei mai vechi postări"
- Toate rezumatele sunt din cea mai veche postare
<?php
$args = array( 'numberposts' => '8' );
$recent_posts = wp_get_recent_posts( $args );
$noticias_highlight = true;
foreach( $recent_posts as $recent ){
?>
<div class="entry <?php if ($noticias_highlight) echo 'highlight'; $noticias_highlight = !$noticias_highlight; ?>">
<div class="title"><p><a href="<?php the_permalink($recent["ID"]); ?>"><?php the_title($recent["ID"]); ?></a></p></div>
<div class="subtitle"><?php the_excerpt($recent["ID"]); ?></div>
</div>
<?php
}
?>

Nu folosiți metodele 'helper', ele tind să cauzeze mai multe probleme decât beneficii.
De fiecare dată când doriți să preluați postări, fie cele mai recente, cele mai vechi, dintr-o categorie etc., utilizați o buclă WP_Query
, iată forma ei standard:
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// faci operații aici
}
wp_reset_postdata();
} else {
// nu s-au găsit postări
}
Asta este ceea ce wp_recent_posts
va face intern, deși nu o face foarte bine. Așadar, salvați codul de mai sus într-un macro de autocompletare în editorul vostru.

Multe greșeli în codul din întrebare:
the_permalink()
nu acceptă argumente și returnează link-ul postării curente. Foloseșteecho get_permalink()
în loc.the_title()
afișează titlul postării curente, iar primul său argument este un șir de caractere care va fi afișat înaintea titlului. Acesta este motivul pentru care titlurile sunt toate la fel, dar conțin ID-urile numerice pentru postările corecte. Foloseșteecho get_the_title()
în loc.the_excerpt()
nu acceptă argumente și afișează rezumatul postării curente. Nu știu dacă există o funcție similară care acceptă ID-ul postării ca argument.
Cel mai important:
wp_get_recent_posts()
va returna un array care conține câte un array pentru fiecare postare (de aceea se foloseșteforeach
). Deci, în loc dethe_title()
sauget_the_title()
, titlul poate fi obținut prin$array[post_title]
, rezumatul prin$array[post_excerpt]
(va fi gol dacă nu există rezumat, nu va trunchia automat conținutul postării),$array[post_content]
pentru conținutul postării, etc.wp_get_recent_posts()
nu pare să folosească un loop WordPress. Deci funcțiile care folosesc postarea curentă vor folosi întotdeauna aceeași postare. Asta se întâmplă în exemplul dat.
Și cel mai important:
- Folosește
WP_Query()
în loc dewp_get_recent_posts()
;

Puteți folosi shortcode-ul Display Posts în marcajul barei laterale. Plugin-ul este disponibil aici: http://wordpress.org/plugins/display-posts-shortcode/

Prefer să nu folosesc un plugin pentru funcționalități simple care pot fi realizate în câteva linii de cod.
