El bucle (III) Personalizando el Bucle (I) El objeto WP_Query

kwe7fgq0WP_Query  es una clase definida de WordPress que facilita la creación de bucles personalizados, aunque como iremos viendo más adelante también podemos utilizar las funciones query_posts() y get_posts() que usan la clase WP_Query. De hecho al utilizar query_posts() la variable global $wp_query se utiliza como una instancia de WP_Query, convirtiendo a $wp_query en un almacén de datos. (No te preocupes esto lo iremos viendo y explicando de nuevo poco a poco)

Los bucles personalizados se puede utilizar en cualquier parte de los archivos de plantilla, pero para mostrar diferentes tipos de contenidos se deben de crear diferentes instancias a WP_Query.

Al utilizar esta clase, esta nos llega con diversas funciones predeterminadas para generar consultas , ejecutarlas y para analizar parámetros de la URL. No obstante se pueden utilizar estos métodos para crear consultas personalizadas y de ese modo controlar aun más el bucle para nuestros propósitos…

De esta forma podríamos ir creando nuestro bucle personalizado de la siguiente forma:

<?php
// la consulta
$the_query = new WP_Query( $args );
// el bucle
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
 // en caso de no encontrar posts
}
/* Restauracion del Post Data original */
wp_reset_postdata();
?>

Hay que tener en cuenta que WP almacena en la caché la matriz de entradas devueltas por la consulta, de este modo al hacer referencia de nuevo a la consulta está no tiene que realizarse de nuevo sobre la base de datos.

Generando una consulta personalizada

Los parámetros de la consulta nos sirven para determinar el contenido que esta nos devolverá filtrandolo como nosotros queramos. Incluso se pueden utilizar diferentes parámetros a la vez utilizando el carácter & para separarlos.

Como de costumbre el codex de WP nos puede servir de mucha ayuda, esta vez en su sección donde detalla todos los parámetros disponibles.

Pero aquí vamos a ver algunos de los más importantes para poder trabajar de forma y sencilla:

Parámetros de entradas:

Suelen se los más evidentes y utilizados, los cuales seleccionan el número y el tipo de entradas para mostrar…

  • p=5: muestra la entrada que tiene la ID igual a p
  • name=slug: carga las entradas en funcion de la parte final de la dirección o slug
  • post_status=draft: carga las segun su estatus, en este caso los borradores
  • ignore_sticky_posts: ignora las entradas fijas, es decir aquellas que siempre aperecerán en primer lugar.
  • post_type=page: carga las entradas de cierto tipo, ya sean entradas, páginas…
  • posts_per_page=8: Número de entradas a mostrar por página, si se desean mostrar todas hay que poner -1
  • offset=2: nos dice el número de entradas que se ignorarán antes de cargar.

Parámetros por página

Las páginas cuentan con unos parámetros similares para controlar su selección

  • page_id=4: carga una página concreta según la id de la misma.
  • pagename=nombre: carga la página que tiene el nombre establecido
  • pagename=parent/child: carga una página secundaria por su ruta de slug

Parámetros de categorías, etiquetas y autor

  • cat=1,4,7: carga las entradas que se encuentran en las categorías enumeradas por su id.
  • category_name=nombre: carga las entradas según el nombre de la categoría a la que pertenecen.
  • tag=nombre: carga la entrada en función del nombre de la etiqueta
  • tag_id=4: carga entradas en función de la id de la etiqueta
  • author=5: carga entradas en función de la id del autor
  • author_name=miguel: carga las entradas en función del nombre del autor

Para meteros de hora, fecha, orden y personalizados

Este tipo de parámetros son muy útiles, ya que nos pueden servir para producir bucles tipo calendario, ordenar los resultados por titulo…

  • monthnum=2: recoge las entradas que se crearon en febrero
  • day=12: recoge las entradas que se crearon el día 12 del mes
  • year=2014: recoge la entradas que se crearon en el 2014
  • orderby=title: nos dice el campo por el que se han de ordenar las entrada, siendo muy útil para muchos resultados.
  • order=ASC: define el orden ascendente (ASC) o descendente (DESC) en el que se mostrarán las entradas ordenadas por el orderby
  • meta_key=color y meta_value=blue: carga las entrada por nombre de campo personalizado

qbcp2e5bCombinando todas las piezas

Una vez que tenemos todas las piezas ya podemos comenzar a montar nuestro bucle personalizado, para ello utilizamos la consulta mostrada más arriba y tan solo tenemos que jugar tanto con los argumentos de la misma como con las etiquetas de plantilla para poder hacer lo que queramos.

A continuación vamos a ver algunos ejemplos en el uso de parámetros para que se entienda como se utilizan estos y su simpleza.

Mostrar una entrada en función solo de su ID


$the_query = new WP_query('p=4');

Mostrar todas las entradas de un determinado día


$the_query = new WP_query('monthnum=5&day=10&year=2015');

Mostrar todas las etiquetas de una categoría y de una etiqueta especificas


$the_query = new WP_query('cat=4&tag=javascript');

Mostrar todas las entradas con las etiquetas php o angular


$the_query = new WP_query('tag=php,angular');

Mostrar una página usando su slug con padre e hijo


$query = new WP_Query( 'pagename=contact_us/canada' );

Las opciones son prácticamente infinitas, y hay multitud de ejemplos que se pueden consultar en el codex, cosa que os recomiendo llegado el caso, para ello solo hay que hacer click en el siguiente enlace:

http://codex.wordpress.org/Class_Reference/WP_Query#Parameters