Obtener el primer post de wp_query

3 abr 2014, 22:44:00
Vistas: 42.3K
Votos: 8

¿Cómo puedo obtener el primer post de un resultado de WP_Query?

$connected = new WP_Query( array(
// Argumentos
));

// Esto no funciona...
echo $connected[0]->post_name;

Para obtener el primer post, puedes usar cualquiera de estas opciones:

// Opción 1: Usando posts
$first_post = $connected->posts[0];
echo $first_post->post_name;

// Opción 2: Usando el loop
if ($connected->have_posts()) : 
    $connected->the_post();
    echo get_the_title();
endif;
wp_reset_postdata();

// Opción 3: Usando get_posts()
$first_post = $connected->get_posts()[0];
echo $first_post->post_name;
6
Comentarios

Debes usar un bucle. Lee la entrada del codex sobre WP_Query... hay un ejemplo de bucle allí. Adicionalmente en la misma página puedes encontrar el parámetro posts_per_page y limitar la consulta para recuperar solo 1 post.

helgatheviking helgatheviking
3 abr 2014 22:54:45

@helgatheviking Sí, sé que es posible de esa manera, pero ¿no es posible sin el bucle?

Robbert Robbert
3 abr 2014 22:56:19

Puedes usar get_post() Codex o usar El Bucle como sugiere el comentarista anterior, y si aún necesitas el primer post siempre puedes rebobinar tu consulta - $connected->rewind_posts()

Howdy_McGee Howdy_McGee
3 abr 2014 23:05:02

Prueba con $connected->posts[0]->post_name - $connected es un objeto WP_Query que contiene un miembro array de posts.

User User
3 abr 2014 23:08:02

Todo es posible, pero ¿por qué reinventar la rueda? Usa var_dump($connected) para ver por qué lo que propusiste no funciona. $connected es en realidad un objeto donde los posts resultantes están en la propiedad $connected->posts.

helgatheviking helgatheviking
3 abr 2014 23:10:09

Gracias a todos por la ayuda. ¡$connected->posts[0]->post_name funcionó!

Robbert Robbert
4 abr 2014 09:51:05
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 2
0
20

Si revisas WP_Query, el conjunto de publicaciones consultadas se guarda en la propiedad posts y la publicación actual se asigna a la propiedad post (cada vez que el bucle itera).

Así que podrías hacer $connected->posts[0] si solo necesitas obtener esa, pero podría ser más conveniente hacer $connected->the_post(); y luego $connected->post si necesitas saltarte la primera y procesar el resto en un bucle normal.

3 abr 2014 23:30:20
0

Puedes usar un código como este:

if ($the_query->have_posts()) {
  $first_post = $the_query->posts[0];
  echo "Título del 1er post\t:"$first_post->post_title;
}
25 feb 2021 10:29:59