Accediendo al contenido de las entradas con WP_Query

29 ene 2015, 20:59:24
Vistas: 30.8K
Votos: 4

Tengo el siguiente código de una plantilla para obtener la información de las entradas:

<?php
 $args = array(
    'post_type'      => 'post', // tipo de post
    'posts_per_page' => $count, // número de posts por página
    'paged'          => $paged, // número de página actual
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
        <?php echo $wp_query->post_title.'<br>';
    <?php endwhile; ?>
<?php endif; ?>

Me gustaría mostrar el título de la entrada pero cuando intento hacerlo como se muestra arriba no muestra nada. ¿Cómo puedo acceder a la información de la entrada?

0
Todas las respuestas a la pregunta 2
2

En primer lugar, no uses ni abuses de la variable global $wp_query. Esta global debe reservarse únicamente para la consulta principal. Utiliza cualquier otra variable que no cause conflictos.

En segundo lugar, no uses las propiedades WP_Post sin filtrar. Estas son crudas y sin filtrar. WP_Query sí establece los datos de la publicación por defecto, lo que permite usar las etiquetas de plantilla.

En tercer lugar, siempre reinicia todas las instancias de WP_Query para evitar conflictos con otras consultas en la misma página.

En cuarto lugar, tienes un error de sintaxis en esta línea <?php echo $wp_query->post_title.'<br>';. Te falta la etiqueta de cierre de PHP.

Puedes reescribir tu código de la siguiente manera:

 $args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) { 
    $query->the_post();
        the_title();
        the_content();
    }
    wp_reset_postdata();
}

EDITAR

Si necesitas acceder directamente a las propiedades de WP_Post, puedes usar por ejemplo:

echo apply_filters( 'the_content', $query->post_content );

para mostrar el contenido de la publicación,

echo apply_filters( 'the_title', $query->post_title );

mostrará el título de la publicación. El estado de la publicación se puede acceder con:

$query->post_status

Consulta una lista de todas las propiedades disponibles aquí.

Recuerda que existen etiquetas de plantilla disponibles durante el bucle para mostrar esta información sin usar las propiedades de WP_Post.

29 ene 2015 21:14:01
Comentarios

Hice la misma pregunta abajo: ¿Qué pasa si quiero acceder a más cosas, como el post_status y cosas así? ¿No es buena idea usar WP_Query así para eso?

user1048676 user1048676
29 ene 2015 21:15:40

Mira mi actualización. Espero que esto ayude

Pieter Goosen Pieter Goosen
29 ene 2015 21:22:05
2

Pequeño error en tu código. Una vez que has iniciado tu bucle (lo cual haces después de establecer $wp_query->the_post();), entonces puedes comenzar a acceder al contenido de tu publicación usando las etiquetas de plantilla de WordPress. Así que si quisieras mostrar un título y contenido, se vería así:

<?php
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php endif; ?>

Te recomiendo leer sobre WP_Query y las etiquetas de plantilla.

29 ene 2015 21:11:23
Comentarios

¿Qué pasa si quiero acceder a más cosas, como el post_status y cosas por el estilo?

user1048676 user1048676
29 ene 2015 21:12:42

Todos esos se hacen con etiquetas de plantilla, mira el enlace de arriba. <?php the_author(); ?> mostraría el nombre del autor, <?php echo get_post_status(); ?> te dará el estado de la publicación, etc.

Jason Hoffmann Jason Hoffmann
29 ene 2015 21:16:40