2009-02-20 10 views
8

Parece que hay tres maneras principales de contenido de la salida de Wordpress usando sus funciones incorporadas, con WP_Query siendo la recomendada:¿Cuál es el mejor método para crear sus propios bucles de Wordpress?

Lo Cuáles son las diferencias entre ellos? (Entiendo que WP_Query es la clase, y los otros dos son métodos).

¿Cuál es la forma más limpia de tener múltiples bucles en la misma página, sin que ninguno de ellos interfieran entre sí?

Busco ejemplos de cómo programar sus bucles WP; p. Salida 2 postales listas separadas por categoría, con archivos adjuntos, los metadatos, etc.

Ésta es la mejor referencia que encontré hasta ahora:

Respuesta

5

Yo he usado tanto WP_Query y get_posts. En una de mis plantillas de barra lateral, utilizo el siguiente ciclo para visualizar las publicaciones de una categoría en particular mediante el uso de campos personalizados con una clave de 'category_to_load' que contiene la categoría slug o nombre de categoría. La diferencia real viene en la implementación de cualquiera de los métodos.

El método get_posts se parece a lo que en algunos de mis plantillas:

Cuando la ejecución WP_Query se ve así:

$blog_posts = new WP_Query('showposts=15'); 

while ($blog_posts->have_posts()) : $blog_posts->the_post(); ?> 

      <div <?php post_class() ?> id="post-<?php the_ID(); ?>" class="blog_post"> 
       <div class="title"> 
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> 
        <span class="date"><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></span> 
       </div> 
       <div class="entry"> 
        <?php the_content(); ?> 
       </div> 
       <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?></p> 
      </div> 

     <?php endwhile; ?> 

La diferencia principal es que usted no tiene que restablecer la variable global $ post y tampoco tiene que configurar los datos de la publicación al llamar a setup_postdata ($ post) en cada objeto de publicación cuando usa WP_query. También puede usar la encantadora función have_posts() en la función WP_Query, que no está disponible con get_posts().

No debe usar la función query_posts() a menos que realmente lo desee porque modifica el bucle principal de la página. Ver el docs. Entonces, si está creando una página especial para mostrar su blog, entonces invocar query_posts puede arruinar el ciclo de la página, por lo tanto, debe usar WP_Query.

Eso es solo mis dos centavos. Mi última sugerencia, tu primera opción debería ser WP_Query.

-Chris

+0

¿Cómo acceder a los correos niños (adjuntos, revisiones, etc.). ¿Esta sería una consulta separada? – meleyal

+0

puede usar la función get_children(): http://codex.wordpress.org/Function_Reference/get_children. O bien, puede usar wp_list_pages - wp_list_pages ('title_li = & child_of ='. $ Post-> ID. '& Show_date = modified & date_format = $ date_format'); ?>: http://codex.wordpress.org/wp_list_pages si quieres una lista. -DO –

3

De los documentos WP para get_posts:

get_posts() también puede tomar los parámetros que query_posts() puede, ya que ambas funciones ahora usan el mismo código de consulta de base de datos internamente.

La única diferencia entre las dos funciones es que get_posts devuelve una matriz con los registros de correos, mientras query_posts almacena los registros en el objeto de consulta para su recuperación por las funciones de plantilla (has_posts, the_post, etc).

Ambos utilizan el objeto WP_Query para ejecutar la consulta.

Creación de un segundo bucle está cubierto de la Wordpress docs. Hay algunos enlaces allí para otros ejemplos de bucles múltiples. Notarás que todos lo hacen de manera diferente, pero todos parecen estar contentos con sus resultados.

1

WP utiliza un objeto llamado $wp_query para el bucle principal. Por lo general, no vemos este objeto porque está escondido detrás de have_posts() y the_post() que sólo son contenedores para $wp_query->have_posts() y $wp_query->the_post()

Si desea modificar el bucle principal que debe utilizar query_posts() antes del bucle.

Si desea otro bucle, puede volver a utilizar el objeto $wp_query utilizando query_posts() antes de ese nuevo bucle. Esto se puede hacer muchas veces si es necesario.

Si por alguna razón necesita mantener el objeto $ wp_query ENTONCES debería usar WP_Query. Y, por supuesto, como have_posts() y the_post() son envoltorios para el objeto $wp_query, no puede usarlos con WP_Query. Usted debe usar en lugar $your_query_obj->have_posts() decir

$sidebar= WP_Query('category_name= sidebar'); 

while($sidebar->have_posts()): $sidebar->the_post(); 
    the_title(); 
    the_content(); 
endwhile; 

Un buen caso en WP_Query podría ser mejor que query_posts() es una barra lateral izquierda. Como el bucle de código para la barra lateral probablemente se colocará en la parte superior del bucle principal, una llamada query_posts() habrá cambiado el objeto $wp_query y también habrá cambiado el bucle principal. En este caso, para usar query_posts() en el código de la barra lateral, también necesitará usar query_posts() antes del bucle principal para consultar el contenido adecuado para ese bucle.

Así que usar WP_Query para este caso mantendrá $ wp_query y, por lo tanto, no se tocará el ciclo principal.

Pero, de nuevo, para un escenario común query_posts() es una hermosa manera de consultar su contenido:

query_posts('category_name=blog'); 

while(have_posts()): the_post(); 
    the_title(); 
    the_content(); 
endwhile; 
Cuestiones relacionadas