WordPress.org

Idiomas: Inglés * Français * Italiano • Loop 日本語 Português do Brasil • Русский • 中文 (..) • 中文(Add) * (Agregue su idioma)

El bucle es el código PHP utilizado por WordPress para mostrar publicaciones. Usando El Bucle, WordPress procesa cada publicación que se mostrará en la página actual y la formatea de acuerdo con la forma en que coincide con los criterios especificados dentro de las etiquetas de bucle. Cualquier código HTML o PHP en el Bucle se procesará en cada publicación.

Cuando la documentación de WordPress dice «Esta etiqueta debe estar dentro del Bucle», como para Etiquetas de plantilla o complementos específicos, la etiqueta se repetirá para cada publicación. Por ejemplo, el Bucle muestra la siguiente información de forma predeterminada para cada publicación:

  • Title (the_title ())
  • Time (the_time ())
  • Categories (the_category ()).

Puede mostrar otra información sobre cada publicación utilizando las Etiquetas de plantilla adecuadas o (para usuarios avanzados) accediendo a la variable post post, que se establece con la información de la publicación actual mientras se ejecuta el Bucle.

Para ver el Bucle para principiantes, consulte El Bucle en acción.

Usando el Bucle

El Bucle debe colocarse en el índice del Tema.php y en cualquier otra Plantilla usada para mostrar información post.

Asegúrate de incluir la llamada a la plantilla de encabezado en la parte superior de las plantillas de tu tema. Si está utilizando el Bucle dentro de su propio diseño (y su propio diseño no es una plantilla), establezca WP_USE_THEMES en false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

El bucle comienza aquí:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

y termina aquí:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Esto está utilizando la sintaxis alternativa de PHP para estructuras de control, y también podría expresarse como:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Ejemplos de bucle

Publicaciones de estilo De Alguna Categoría Diferente

Este ejemplo muestra cada publicación con su Título (que se usa como enlace al Enlace permanente de la Publicación), Categorías y Contenido. También permite que las publicaciones en una categoría con ID de categoría ‘3’ tengan un estilo diferente. Para lograr esto, se utiliza la etiqueta de plantilla in_category (). Lea los comentarios cuidadosamente para ver qué está haciendo cada parte del código.

Nota: Todo el código HTML debe estar fuera de <?php ?etiquetas >. Y, el código PHP (incluso cosas tan simples como llaves: } ) debe estar dentro de <?php ?etiquetas >. Puede iniciar y detener bloques de código PHP para intercalar código HTML dentro de sentencias if y else, como se muestra en el ejemplo anterior.

Excluir Publicaciones De Alguna Categoría

Este ejemplo muestra cómo ocultar una o varias Categorías específicas para que no se muestren. En este caso, se excluyen los puestos de las categorías 3 y 8. El ejemplo es diferente del ejemplo anterior en que realiza un cambio en la consulta en sí.

Nota: Si usas este ejemplo para tu página principal, debes usar una Plantilla diferente para tus archivos de categoría; de lo contrario, WordPress excluirá todas las publicaciones de Categoría 3 y Categoría 8, incluso cuando veas ese Archivo de Categoría. Sin embargo, si quieres usar el mismo archivo de plantilla, puedes evitarlo usando la etiqueta is_home() para asegurarte de que las publicaciones de Categoría 3 y Categoría 8 solo se excluyan de la página principal:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

Hay otras etiquetas condicionales que se pueden usar para controlar la salida dependiendo de si una condición en particular es verdadera o no con respecto a la página solicitada.

Orientación a objetos

Los bucles son una combinación de comportamiento orientado a objetos y global. Esto es confuso al principio.

Las dos variables globales importantes para bucles son:

  • $wp_query que es un objeto de la clase WP_Query, que contiene un resultado de consulta de base de datos WP entre el cual posts wp_query – >posts, una matriz de WP_Posts individuales.
  • post post, que es el objeto actual de la clase WP_Post

Recuerde: Todas las etiquetas de plantilla dependen de la variable global post post de forma predeterminada y la variable global post post se establece/modifica por the_post (), que obtiene sus datos de la variable global $wp_query. $post también es definido / modificado por WP_Query:: the_post() como se usa en bucles secundarios.

Bucles múltiples

Esta sección trata del uso avanzado del Bucle. Es un poco técnico, pero no dejes que eso te asuste. Comenzaremos con un ejemplo sencillo y trabajaremos a partir de ahí. Con un poco de sentido común, paciencia y entusiasmo, usted también puede hacer múltiples bucles.

En primer lugar, ¿por qué uno querría usar múltiples bucles? En general, la respuesta es que es posible que quieras hacer algo con un grupo de publicaciones y hacer algo diferente a otro grupo de publicaciones, pero mostrar ambos grupos en la misma página. «Algo» podría significar casi cualquier cosa; solo estás limitado por tu habilidad en PHP y tu imaginación.

Veremos ejemplos a continuación, pero primero debe leer sobre los conceptos básicos. Echa un vistazo al bucle básico. Consiste en:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

Un poco aparte en Hacer cosas: en este ejemplo, es simplemente un marcador de posición para un montón de código que determina cómo formatear y mostrar cada publicación en una página. Este código puede cambiar dependiendo de cómo quieras que se vea tu WordPress. Si nos fijamos en el índice del tema de Kubrick.php la sección hacer cosas estaría todo a continuación:

<?php while ( have_posts() ) : the_post(); ?>

Hasta arriba:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

Una explicación para los codificadores que hay:Los have_posts() y los_post () son envoltorios de conveniencia alrededor del objeto global global wp_query, que es donde está toda la acción. El arguments wp_query se llama en el encabezado del blog y los argumentos de consulta de alimentación que entran a través de GET y PATH_INFO. $wp_query toma los argumentos y construye y ejecuta una consulta de base de datos que da como resultado una matriz de publicaciones. Esta matriz se almacena en el objeto y también se devuelve al encabezado del blog, donde se rellena en la matriz global posts posts (para compatibilidad con bucles de post antiguos).

Una vez que WordPress ha terminado de cargar el encabezado del blog y está descendiendo a la plantilla, llegamos a nuestro bucle de publicaciones. have_posts () simplemente llama a hav wp_query->have_posts () que comprueba un contador de bucle para ver si quedan publicaciones en el array de publicaciones. Y the_post() llama a the wp_query->the_post () que avanza el contador de bucles y configura la variable global post post, así como todos los datos globales de post. Una vez que hayamos agotado el bucle, have_posts() devolverá false y habremos terminado.

Ejemplos de bucles

A continuación se muestran tres ejemplos de uso de múltiples bucles. La clave para usar múltiples bucles es que $wp_query solo se puede llamar una vez. Para evitar esto, es posible reutilizar la consulta llamando a rewind_posts() o creando un nuevo objeto de consulta. Esto se trata en el ejemplo 1. En el ejemplo 2, se cubre el uso de una variable para almacenar los resultados de una consulta. Finalmente, ‘múltiples bucles en acción’ reúne un montón de ideas para documentar una forma de usar múltiples bucles para promocionar publicaciones de una categoría determinada en la página de inicio de tu blog.

Bucles múltiples Ejemplo 1

Para recorrer la misma consulta por segunda vez, llame a rewind_posts (). Esto restablecerá el contador de bucles y le permitirá hacer otro bucle.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

Si ha terminado con los mensajes de la consulta original y desea utilizar una consulta diferente, puede reutilizar el objeto quer wp_query llamando a query_posts () y, a continuación, haciendo un bucle de vuelta. query_posts () realizará una nueva consulta, construirá una nueva matriz de posts y restablecerá el contador de bucles.

Si necesita mantener la consulta original, puede crear un nuevo objeto de consulta.

Bucles múltiples Ejemplo 2

Otra versión de usar bucles múltiples toma otra táctica para sortear la incapacidad de usar have_posts() y the_post(). Para resolver esto, debe almacenar la consulta original en una variable y, a continuación, reasignarla con el otro bucle. De esta manera, puede usar todas las funciones estándar que dependen de todos los globales.

Por ejemplo:

Nota: En PHP 5, se hace referencia a los objetos con el operador «= clone» en lugar de «=» como en PHP 4. Para que el ejemplo 2 funcione en PHP 5, necesita usar el siguiente código:

Sin embargo, este segundo ejemplo no funciona en WordPress 2.1.

Múltiples bucles en Acción

La mejor manera de entender cómo usar múltiples bucles es mostrar un ejemplo de su uso. Quizás el uso más común de múltiples bucles es mostrar dos (o más) listas de publicaciones en una página. Esto se hace a menudo cuando un webmaster quiere presentar no solo la última publicación escrita, sino también publicaciones de una categoría determinada.

Dejando de lado todos los problemas de formato y CSS, asumamos que queremos tener dos listas de publicaciones. Uno que enumeraría los posts más recientes (los 10 posts estándar añadidos más recientemente), y otro que contendría solo un post de la categoría ‘destacado’. Las publicaciones en la categoría’ destacados ‘ deben mostrarse primero, seguidas de la segunda lista de publicaciones (el estándar). El problema es que ninguna publicación debe aparecer en ambas categorías.

Paso 1. Obtén solo una publicación de la categoría ‘destacados’.

En inglés, el código anterior sería:

Set my my_query igual al resultado de consultar todas las publicaciones donde la categoría se llama featured y, por cierto, consígueme una sola publicación. Además, establezca la variable do do_not_duplicate igual al número de ID del mensaje único devuelto. Recuerde que la línea Hacer cosas representa todas las opciones de formato asociadas para el post recuperado.

Tenga en cuenta que necesitaremos el valor de do do_not_duplicate en el siguiente paso para asegurarnos de que la misma publicación no aparezca en ambas listas.

Paso 2. El segundo bucle, obtener las X últimas publicaciones (excepto una).

El siguiente código obtiene X publicaciones recientes (como se define en las preferencias de WordPress) guarda la que ya se muestra en el primer bucle y las muestra de acuerdo con Hacer cosas.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

En inglés, el código anterior sería:

Obtener todos los mensajes, donde un mensaje es igual a do do_not_duplicate, luego simplemente no hacer nada (continuar), de lo contrario, mostrar todos los demás mensajes de acuerdo con Hacer cosas. Además, actualice la caché para que los complementos de etiquetas y palabras clave se reproduzcan bien. La variable Recall, do do_not_duplicate contiene el ID de la publicación ya mostrada.

El resultado final

Aquí está cómo se ve la pieza final de código sin ningún formato:

El resultado final sería una página con dos listas. La primera lista contiene solo una publicación, la más reciente de la categoría ‘característica’. La segunda lista contendrá X publicaciones recientes (como se define en las preferencias de WordPress), excepto la publicación que ya se muestra en la primera lista. Por lo tanto, una vez que la publicación de funciones se reemplace por una nueva, la función anterior se mostrará en la sección de lista de publicaciones estándar a continuación (dependiendo de cuántas publicaciones elija mostrar y de la frecuencia de publicación). Esta técnica (o similar) ha sido utilizada por muchos junto con el conocimiento de la Jerarquía de Plantillas para crear un aspecto diferente para el hogar.php e índice.php. Consulte los recursos asociados en la parte inferior de esta página.

Nota para Múltiples Publicaciones en la Primera Categoría

Si posts_per_page=2 o más, deberá modificar un poco el código. La variable do do_not_duplicate debe cambiarse a una matriz en lugar de un solo valor. De lo contrario, el primer bucle terminará y la variable do do_not_duplicate será igual solo al id del último post. Esto resultará en publicaciones duplicadas en el segundo bucle. Para solucionar el problema, reemplace

por

Tenga en cuenta que «posts_per_page» puede ser cualquier número.Esto cambia do do_not_duplicate a una matriz. Luego reemplace

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

por

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

Donde continúe el patrón para cualquier posts_per_page que se establezca igual a (2 en este caso).

Alternativamente, puede pasar toda la matriz do do_not_duplicate a $wp_query y solo se devolverán las entradas que coincidan con sus criterios:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

Tenga en cuenta que en lugar de una cadena, el parámetro de consulta era una matriz asociativa que configuraba la opción post__not_in.

Bucles anidados

Bucles anidados significa que está ejecutando un segundo bucle antes de terminar el primero. Esto puede ser útil para mostrar una lista de publicaciones con un código corto, por ejemplo.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

Es necesario restablecer los datos del bucle principal después de un bucle anidado para que algunas variables globales vuelvan a contener los valores correctos.

Sources

La sección sobre bucles múltiples es una combinación de la discusión de Ryan Boren y Alex King sobre el Bucle en la Lista de correo de Hackers. El ejemplo de bucles anidados fue inspirado por otra discusión en la lista de correo y un post de Nicolas Kuttler.

Recursos

  • Generador de WP_Query de WordPress
  • Entrar en el bucle – (diapositivas) una introducción a cómo los complementos y temas pueden modificar el bucle
  • Bucle personalizado de WordPress
  • Generador de loop de WP_Query de WordPress

Relacionado

Para obtener más información sobre el Bucle de WordPress y las diversas etiquetas de plantilla que funcionan solo dentro del Bucle, aquí hay más recursos:

Más sobre el Bucle

  • Artículo: El Bucle en acción
  • Artículo: Etiquetas de plantilla
  • Artículo: Uso del Bucle en Archivos de plantilla

Artículos

  • Artículo: El Bucle: Una descripción básica de su uso de consultas dentro del bucle de WordPress.
  • Artículo: Resumen de consultas-Explicación de cómo determinar qué consultas generan WordPress.
  • Artículo: Personalización de consultas a través de Gancho
  • Artículo: Ver artículos Consulta MYSQL mediante personalización
  • Artículo: Compilación de consultas avanzadas en Taxonomías
  • Artículo: Compilación de consultas personalizadas mediante desplazamiento y paginación

Documentación de código

  • Clase: WP_Query – Descripción detallada de la clase WP_Query
  • Clase: WP_Comment_Query-Clase para consultas relacionadas con comentarios
  • Clase: WP_User_Query – Clase para consultas relacionadas con el usuario
  • Objeto: Object wpdb-Descripción general sobre el uso del objeto $wpdb
  • Función: set_query_var()
  • Función: get_query_var()
  • Función: query_posts () – Crear consulta personalizada adicional
  • Función: get_post () – Tomar el ID de un elemento y devolver los registros en la base de datos para ese artículo
  • Función: get_posts() – Una función especializada que devuelve una matriz de elementos
  • Función: get_pages() – Una función especializada que devuelve una matriz de páginas
  • Función: have_posts() – Una condición que determina si la consulta devuelve un artículo
  • Función: the_post() – Se utiliza para establecer automáticamente el bucle después de una consulta
  • Función: rewind_posts() – Borra el bucle actual
  • Función: setup_postdata() – Establece los datos para un único resultado de consulta dentro de un bucle
  • Función: wp_reset_postdata() – Restaura la consulta anterior (generalmente después de un bucle dentro de otro bucle)
  • Función: wp_reset_query()
  • Función: is_main_query() – Garantiza que la consulta que se está cambiando sea solo la consulta principal
  • Gancho de acción: pre_get_posts – Cambie las consultas de WordPress antes de que se ejecuten
  • Gancho de acción: the_post – Modificar el objeto post después de la consulta
  • Gancho de filtro: found_posts – Cambia el valor del objeto found_posts WP_Query
Este artículo está marcado como que necesita edición. Puedes ayudar a Codex editándolo.

You might also like

Deja una respuesta

Tu dirección de correo electrónico no será publicada.