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.

 

Cuando usar wp_reset_query()

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

 

 

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_query_reset()  se usa con query_post
  • 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.