Come usare wp_get_recent_posts?
Sto cercando di visualizzare il titolo e l'estratto degli ultimi 8 post nella sidebar.
Ottengo una lista dove:
- Tutti gli elementi puntano al post più vecchio
- Tutti i titoli sono "numero id del post che dovrebbe essere visualizzato"+"titolo del post più vecchio"
- Tutti gli estratti sono presi dal post più vecchio
<?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
}
?>

Non utilizzare i metodi 'helper', tendono a causare più problemi di quanto valgano.
Ogni volta che vuoi recuperare post, che siano i più recenti, i più vecchi, in una categoria ecc., usa un loop WP_Query
, ecco la sua forma standard:
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// fai qualcosa
}
wp_reset_postdata();
} else {
// nessun post trovato
}
Questo è ciò che wp_recent_posts
farà internamente, anche se non lo fa molto bene. Quindi salva il codice sopra in una macro di autocompletamento nel tuo editor

Molti errori nel codice della domanda:
the_permalink()
non accetta argomenti e restituisce il link del post corrente. Usaecho get_permalink()
invece.the_title()
stampa il titolo del post corrente, e il suo primo argomento è una stringa da stampare prima del titolo. Questo è ciò che causa i titoli tutti uguali ma contenenti gli ID numerici per i post corretti. Usaecho get_the_title()
invece.the_excerpt()
non accetta argomenti e stampa l'estratto del post corrente. Non so se esista una funzione simile che accetti l'ID del post come argomento.
Soprattutto:
wp_get_recent_posts()
restituirà un array contenente un array per ogni post (da qui ilforeach
). Quindi invece dithe_title()
oget_the_title()
il titolo può essere restituito tramite$array[post_title]
, l'estratto tramite$array[post_excerpt]
(sarà vuoto se non è presente un estratto, non troncherà automaticamente il contenuto del post),$array[post_content]
per il contenuto del post, ecc.wp_get_recent_posts()
non sembra usare un loop di WordPress. Quindi le funzioni che usano il post corrente utilizzeranno sempre lo stesso post. Questo è ciò che accade nell'esempio.
E ancora più importante:
- Usa
WP_Query()
invece diwp_get_recent_posts()
;

Puoi utilizzare lo shortcode Display Posts nel markup della tua sidebar. Il plugin è disponibile qui: http://wordpress.org/plugins/display-posts-shortcode/

Preferisco non utilizzare un plugin per funzionalità semplici che possono essere ottenute con poche righe di codice.
