Uso avanzado del Loop de WordPress

Uso avanzado del Loop de WordPress

0 5105

Recientemente te he explicado qué es y de qué forma marcha el loop de WordPress, y asimismo de qué manera alterar el loop para conseguir que se comporte de la manera en que tú desees que lo haga, usando WP_Query entre otros muchos métodos para recuperar contenidos concretos de la base de datos.

Seguramente después de leer los precedentes artículos, te vas a estar preguntando cómo utilizar más de un Loop en WordPress y qué tienes que tomar en consideración para que no se rompa tu web. Está claro que el Loop se puede emplear múltiples veces en tus temas y plugins. Como ya viste, esto facilita mucho el hecho de poder enseñar diferentes géneros de contenido en diferentes lugares de tu página web en WordPress. Sin embargo, hemos de ser muy cuidadosos y continuar ciertas normas 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é forma conseguir loops multipasada y de qué manera reiniciar loops y de este modo mantener tu web sin fallos.

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

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 usando, por servirnos de un ejemplo, el Loop principal junto a instancias auxiliares de WP_Query.

Como siempre es más simple comprender las cosas a través de un ejemplo, veamos de qué manera podemos crear un Loop anidado al Loop primordial para mostrar 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 dos y 3). 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 ocho).

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 $ tags (ver línea once). Si la entrada tenía etiquetas, cogemos los identificadores de las etiquetas y los guardamos en dólares americanos tagIDs (líneas trece a 20).

Por último, vamos a crear un Loop anidado dónde buscar entradas que tengan exactamente 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 veinticuatro. Aquí (líneas 25 a 28) ponemos como condiciones que las entradas tengan las etiquetas cuyos identificadores están en dólares americanos tagIDs (tag__in on-line 25) y que no sean la entrada principal (línea veintiseis, para evitar repetir la entrada que ya hemos mostrado). Además, indicamos que queremos 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 resultados (línea treinta y uno) iteramos por el bucle de entradas relacionadas y mostramos un link y el título de cada uno de ellos de estas entradas (línea treinta y seis). Obviamente, podemos incluir las etiquetas HTML y el CSS que queramos para maquetar el diseño como mejor nos guste, mas la estructura básica para entradas relacionadas utilizando loops anidados es la que has visto.

Loops Multipasada

Una técnica avanzada para volver a utilizar 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 permite 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 colocar la función rewind_posts justo al final del primer bucle (ver línea 7), para que todo se rebobine y el segundo bucle pueda marchar como lo hizo el primero. Si no conoces el término de rebobinar, es que eres demasiado joven

Cómo Resetear Loops

Cuando alteramos el Loop primordial o creamos loops personalizados, acostumbra a ser aconsejable reiniciar el loop una vez hemos terminado. Esto lo podemos hacer de dos maneras diferentes en WordPress: con wp_reset_postdata() y con wp_reset_query().

El primer procedimiento es emplear wp_reset_postdata(). Esta función restaura la variable globaln dólares americanos post con el valor de la entrada actual en la consulta principal. Es el procedimiento preferido cuando empleamos WP_Query para crear loops adaptados.

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

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

El segundo método disponible para evitar problemas al emplear múltiples loops es utilizar la llamada wp_reset_query(). Es el procedimiento preferido cuando usamos query_posts() en nuestro loop adaptado.

En resumen, wp_reset_query() va siempre y en todo momento después de emplear query_posts en el loop y wp_reset_postdata() va siempre y en toda circunstancia 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 escuetamente todo cuanto hemos aprendido hasta ahora:

  • En la primera entrada hemos estudiado:
    • los pasos que sigue WordPress para generar el contenido de una web,
    • la estructura básica de un Loop en WordPress,
    • el empleo 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 personalizados,
    • qué parametros podemos utilizar para modificar el loop,
    • cómo utilizar query_posts() para alterar el loop de WordPress,
    • cómo emplear get_posts() como alternativa a un loop para obtener contenidos,
    • y cómo usar el hook pre_get_posts para alterar todos los loops de WordPress.
  • En esta última entrada hemos visto:
    • el uso de loops anidados para recobrar información compleja desde una entrada,
    • cómo usar loops multipasada mediante el uso de la función de rebobinado de loops rewind_posts(),
    • cómo reiniciar loops con wp_reset_query() y wp_reset_postdata() para eludir problemas entre loops.

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

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

Imágen señalada de Randy Robertson

NO COMMENTS

Leave a Reply