¿Puedo ejecutar un nuevo WP_Query dentro del bucle sin afectar al bucle? (wordpress)

2 minutos de lectura

la siguiente función funciona bien, pero necesito ejecutarla dentro del bucle. Si lo hace, el contenido de la publicación en realidad se toma de la última publicación de mi WP_Query. No del que debería aparecer.

¿Hay alguna forma de ejecutar mi consulta y dejar El bucle no se ve afectado?

function recent_post_by_author() {
  echo '<div class="recent_post_by_author">';
  $my_query = new WP_Query('author_name=Radek&showposts=2');
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
  <a href="https://stackoverflow.com/questions/2842679/<?php the_permalink() ?>" title="<?php the_title(); ?>"> <?php the_title(); ?></a><BR>
  <?php endwhile;
  echo '</div>';
}

La solución para esto es llamar wp_reset_postdata una vez que haya terminado de recorrer su instancia separada de WP_Query.

El problema aparece porque WordPress usa un global $post variable que se establece cada vez que una llamada a the_post() se realiza en cualquier objeto WP_Query. Cuando lo llama desde su consulta de 2 publicaciones de Radek, pierde la pista del objeto WP_Query original.

¿Te faltan algunas etiquetas de apertura y cierre de php al incluir la nueva consulta en la función? Esto funciona como un nuevo bucle de consulta independiente que se puede usar varias veces dentro del bucle principal de WP:

<?php $my_query = new WP_Query('author_name=Radek&showposts=2'); ?>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<a href="https://stackoverflow.com/questions/2842679/<?php the_permalink() ?>" title="<?php the_title(); ?>">
<?php the_title(); ?></a>
<?php endwhile; ?>

  • ¿Por qué estás usando la nueva consulta en una función? ¿Necesitas hacer eso?

    – markratledge

    17 mayo 2010 a las 13:43

  • ¿Estás seguro de que no afectará mi ciclo que ya se está ejecutando? Si es así, estoy de suerte porque necesito hacer esto.

    – Aayush

    22 de agosto de 2010 a las 11:56

  • Esto no resolverá el problema que tiene… $my_query->the_post(); modifica el mundial $post variable, dejándola adjunta a su nueva consulta.

    – Nate Cook

    25 de febrero de 2012 a las 7:50

  • Gracias Nate, esto debería ser una respuesta, no un comentario 🙂

    – akmur

    16 de febrero de 2014 a las 21:13

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad