Resetear o limpiar los loops de WordPress

Andrés F. Patiño

25 Dic, 2018

Resetear o limpiar los loops de WordPress

Cuando trabajamos con WordPress y queremos hacer varias queries muchas veces es un quebradero de cabeza, porque los resultados que obtenemos no son los que deberían ser.
Para ello tenemos varias funciones y cada una de ella debe usarse en su lugar.

  • wp_reset_query() , se usa con WP_Query
  • wp_reset_postdata() , se usa con query_posts()

Cuando usar wp_reset_postdata()

Esta funcion se usa cuando utilizamos nuestras  WP_Query  dentro de una pagina o template y nos sirve para restaurar la   variable global $post del bucle principal.

Para que nos enteremos, cuando entramos en una pagina ya sea una entrada, pagina, categoría,  por defecto ya vienen cargados los datos de esa pagina ,.. y se encuentran en la variable global $post, nosotros al hacer otro bucle, perderemos la información principal asi que luego tenemos que restaurarla.

Por ejemplo si estamos creando una pagina de blog y hacemos una query donde queremos mostrar las entradas usaremos WP_Query() pero esta pagina ya tenia información como el titulo, contenido,… al usar wp_reset_postdata() restauramos la variable $post del bucle principal después de nuestro bucle.

// definimos $args para pasarlo a WP_QUERY
$args = array( 'posts_per_page' => 10 );

// nuestra query
$the_query = new WP_Query( $args );
?>

<?php if ( $the_query->have_posts() ) : ?>

<!-- empezamos el bucle -->
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<?php the_title(); ?>
<?php the_excerpt(); ?>
<?php endwhile; ?><!-- end of the loop -->

Cuando usar wp_reset_query()

Esta función la usaremos cuando trabajamos con query_posts y es parecida a la anterior

$args = array ( 'post_parent' => 5 );
query_posts( $args );

if ( have_posts() ):
while ( have_posts() ) :
the_post();

// Do stuff with the post content.
the_title();
the_permalink(); // Etc.

endwhile;
else:
// Insert any content or load a template for no posts found.

Resumen

Ambas funciones resetean la query y restauran la variable global $post, pero wp_query_reset va un paso mas alla y actualiza y destruye la query anterio antes de hacerlo. Y saber que:

  • wp_reset_query() , se usa con WP_Query
  • wp_reset_postdata() , se usa con query_posts()

 

wp_reset_query() se llama fuera del if  y wp_reset_postdata() despues de terminar el while o la paginacion de este.