¿Cómo uso wp_get_recent_posts?
Estoy intentando mostrar el título y extracto de las 8 publicaciones más recientes en la barra lateral.
Estoy obteniendo una lista donde:
- Todos los elementos enlazan a la publicación más antigua
- Todos los títulos son "número de id de una publicación que debería mostrarse"+"título de la publicación más antigua"
- Todos los extractos son de la publicación más antigua
<?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
}
?>

No utilices los métodos 'helper', suelen causar más problemas de lo que valen.
Cada vez que quieras obtener publicaciones, ya sean las más recientes, las más antiguas, en una categoría, etc., usa un bucle WP_Query
, aquí está su forma estándar:
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// hacer cosas
}
wp_reset_postdata();
} else {
// no se encontraron publicaciones
}
Esto es lo que wp_recent_posts
estará haciendo internamente, aunque no lo está haciendo muy bien. Así que guarda lo anterior en una macro de autocompletado en tu editor

Muchos errores en el código de la pregunta:
the_permalink()
no acepta argumentos y devuelve el enlace del post actual. Usaecho get_permalink()
en su lugar.the_title()
imprime el título del post actual, y su primer argumento es una cadena que se imprime antes del título. Eso es lo que causa que los títulos sean todos iguales pero contengan los IDs numéricos de los posts correctos. Usaecho get_the_title()
en su lugar.the_excerpt()
no acepta argumentos e imprime el extracto del post actual. No sé si existe una función similar que acepte el ID del post como argumento.
Lo más importante:
wp_get_recent_posts()
devolverá un array que contiene un array por cada post (de ahí elforeach
). Así que en lugar dethe_title()
oget_the_title()
, el título se puede obtener mediante$array[post_title]
, el extracto mediante$array[post_excerpt]
(estará vacío si no hay extracto, no truncará automáticamente el contenido del post),$array[post_content]
para el contenido del post, etc.wp_get_recent_posts()
parece que no usa un bucle de WordPress. Por lo tanto, las funciones que usan el post actual siempre usarán el mismo post. Eso es lo que ocurre en el ejemplo.
Y aún más importante:
- Usa
WP_Query()
en su lugar dewp_get_recent_posts()
;

Puedes usar el shortcode de Display Posts en el marcado de tu barra lateral. El plugin está aquí: http://wordpress.org/plugins/display-posts-shortcode/

Prefiero no usar un plugin para funcionalidades simples que pueden lograrse con unas pocas líneas de código.
