Empleo avanzado del Loop de WordPress

Empleo avanzado del Loop de WordPress

0 392

Recientemente te he explicado qué es y cómo funciona el loop de WordPress, y también de qué forma alterar el loop para lograr que se comporte de la forma en que tú quieras que lo haga, utilizando WP_Query entre otros muchos métodos para recuperar contenidos concretos de la base de datos.

Seguramente después de leer los anteriores artículos, te estarás preguntando cómo utilizar más de un Loop en WordPress y qué debes tomar en consideración para que no se rompa tu web. No hay duda de que el Loop se puede usar múltiples veces en tus temas y complementos. Como ya viste, esto facilita muchísimo el hecho de poder enseñar diferentes tipos de contenido en diferentes lugares de tu página web en WordPress. No obstante, tenemos que ser cuidadosísimos y continuar ciertas reglas para evitar problemas.

En este último artículo sobre el loop de WordPress te describiré aspectos más avanzados sobre su uso. Vamos a ver los loops anidados, de qué manera lograr loops multipasada y de qué manera reiniciar loops y así mantener tu página web sin fallos.

De esta forma, una vez comprendas estos últimos conceptos algo más complejos, vas a poder considerarte todo un experto en WP_Query y el loop de WordPress, y probablemente tendrás una mayor confianza al desarrollar tus temas o complementos, que es de lo que se trata. Sin más dilación, empecemos.

Loops Anidados

Los Loops anidados no son más que combinaciones de Loops unos dentro de otros. Se pueden crear dentro de un template de un tema utilizando, por ejemplo, el Loop principal al lado de instancias adicionales de WP_Query.

Como siempre y en todo momento es más simple comprender las cosas a través de un ejemplo, veamos cómo podemos crear un Loop anidado al Loop primordial para enseñar entradas relacionadas con una entrada concreta basándonos en las etiquetas de dicha entrada. El código es este:

En el fragmento anterior tenemos el Loop principal que viene dado (líneas 2 y tres). Para cada entrada en este loop mostramos la URL de la entrada y su título (ver the_permalink y the_title en la línea 6), tal como el contenido (ver the_content en la línea 8).

Además, obtenemos las etiquetas de la entrada con la función wp_get_post_terms (la tienes en el Codex aquí) y las guardamos en la variable dólares americanos tags (ver línea once). Si la entrada tenía etiquetas, cogemos los identificadores de las etiquetas y los guardamos en $ tagIDs (líneas trece a 20).

Por último, crearemos un Loop anidado dónde buscar entradas que tengan las mismas etiquetas que la entrada principal. Estas van a ser las entradas relacionadas que mostraremos ahora. Para esto, creamos una nueva instancia de WP_Query (ver línea treinta) y le pasamos el array de argumentos de la línea 24. Acá (líneas veinticinco a veintiocho) ponemos como condiciones que las entradas tengan las etiquetas cuyos identificadores están en dólares americanos tagIDs (tag__in on-line veinticinco) y que no sean la entrada principal (línea veintiseis, para eludir reiterar la entrada que ya hemos mostrado). Por si fuera poco, señalamos que deseamos que el desenlace se componga de un máximo de cinco entradas (condición en la línea veintisiete).

Ejecutamos el loop anidado (línea 30) y si hay desenlaces (línea 31) iteramos por el bucle de entradas relacionadas y mostramos un enlace y el título de cada uno de ellos de estas entradas (línea 36). Obviamente, podemos incluir las etiquetas en código HTML y el CSS que queramos para maquetar el diseño como mejor nos guste, pero la estructura básica para entradas relacionadas usando loops anidados es la que has visto.

Loops Multipasada

Una técnica avanzada para volver a usar Loops es emplear la función rewind_posts (que tienes acá descrita en el Codex). Esta función rebobina la consulta a la base de datos y el contador del loop, lo que nos deja hacer otro loop utilizando el mismo contenido que en el primer loop. Veamos un ejemplo dónde procesamos el Loop primordial un par de veces.

Hay que poner la función rewind_posts justo al final del primer bucle (ver línea siete), para que todo se rebobine y el segundo bucle pueda marchar tal como lo hizo el primero. Si no conoces el concepto de rebobinar, es que eres demasiado joven

Cómo Reiniciar Loops

Cuando modificamos el Loop primordial o creamos loops adaptados, suele ser aconsejable resetear el loop una vez hemos terminado. Esto lo podemos hacer de 2 formas distintas en WordPress: con wp_reset_postdata() y con wp_reset_query().

El primer método es utilizar wp_reset_postdata(). Esta función restaura la variable globaln $ post con el valor de la entrada actual en la consulta principal. Es el método preferido cuando empleamos WP_Query para crear loops adaptados.

Por ejemplo, imaginemos que definimos un Loop personalizado como el siguiente:

Vemos que este loop altera el Loop principal usando una nueva instancia deWP_Query con condiciones concretas. Para evitar que otros loops en exactamente la misma página se vean perjudicados por este, empleamos la llamada a la función wp_reset_postdata() al final de este loop (ver línea 10). Esto restaura la variable $ post y elimina problemas con el objeto WP_Query primordial.

El segundo procedimiento disponible para evitar inconvenientes al emplear múltiples loops es utilizar la llamada wp_reset_query(). Es el procedimiento preferido cuando empleamos query_posts() en nuestro loop personalizado.

En resumen, wp_reset_query() va siempre y en toda circunstancia tras usar query_posts en el loop y wp_reset_postdata() va siempre después de un loop que use WP_Query o la función get_posts() para recobrar datos. Si has tenido problemas alguna vez con múltiples loops, con estas dos funciones lo arreglas.

Repaso final

Y hasta aquí esta serie de artículos sobre el loop y WP_Query en WordPress. Recordemos brevemente todo cuanto hemos aprendido hasta ahora:

  • En la primera entrada hemos estudiado:
    • los pasos que prosigue WordPress para generar el contenido de una web,
    • la estructura básica de un Loop en WordPress,
    • el uso de Template Tags para mostrar contenido concreto en un loop,
    • y que el Loop es la conexión entre los datos que tenemos en la base de datos MySQL y el HTML que se renderiza en el navegador.
  • En la segunda entrada vimos:
    • cómo emplear WP_Query para crear loops adaptados,
    • qué parametros podemos usar para modificar el loop,
    • cómo usar query_posts() para alterar el loop de WordPress,
    • cómo usar get_posts() como opción alternativa a un loop para conseguir contenidos,
    • y cómo utilizar el hook pre_get_posts para modificar todos los loops de WordPress.
  • En esta última entrada hemos visto:
    • el empleo de loops anidados para recuperar información compleja desde una entrada,
    • cómo usar loops multipasada a través de el empleo de la función de rebobinado de loops rewind_posts(),
    • cómo resetear loops con wp_reset_query() y wp_reset_postdata() para evitar inconvenientes entre loops.

Ya ves que ha sido bastante duro. Si deseas más información, no hay duda de que debes ir al Codex. Te invito a que comiences estudiando más detalles sobre el objeto WP_Query. A partir de ahí vas a poder ir navegando y viendo todo cuanto he ido explicando en esta serie.

Y si te quedan dudas, no te lo pienses y escríbenos. Déjanos un comentario con tu inconveniente o bien con cuanto quieras que expliquemos en más detalle y también intentaremos ayudarte.

Imágen destacada de Randy Robertson

SIMILAR ARTICLES

NO COMMENTS

Leave a Reply