Argumentos WP_Query Estado, Orden y Paginación

En esta parte de la serie sobre Masterización. WP_Query, aprenderá acerca de algunos de los argumentos que puede utilizar con el WP_Query clase, a saber, aquellos para:

  • estado
  • orden
  • paginación

Puede usar estos argumentos para obtener publicaciones programadas de la base de datos, consultar archivos adjuntos, modificar la forma en que se ordenan las publicaciones y cómo están ordenadas, especificar cuántas publicaciones se muestran y mucho más

Pero antes de poder hacer esto, debe comprender cómo funcionan los argumentos en WP_Query.

Un resumen de cómo funcionan los argumentos en WP_Query

Antes de comenzar, hagamos un resumen rápido sobre cómo funcionan los argumentos en WP_Query. Cuando codificas WP_Query en sus temas o complementos, debe incluir cuatro elementos principales:

  • Los argumentos para la consulta, utilizando los parámetros que se tratarán en este tutorial.
  • la propia consulta
  • el lazo
  • Terminando: cerrando las etiquetas if y while y restableciendo los datos del post

En la práctica esto se parecerá a lo siguiente:

have_posts ()) // Iniciar el bucle sobre los resultados de la consulta. while ($ consulta-> have_posts ()) $ consulta-> the_post (); // Los contenidos de los resultados de la consulta consultados van aquí.  // Restaura los datos originales de la publicación. wp_reset_postdata (); ?>

Los argumentos son lo que le dice a WordPress qué datos obtener de la base de datos y los que cubriré aquí. Así que todo lo que nos estamos enfocando aquí es la primera parte del código:

$ args = array (// Argumentos para su consulta);

Como puede ver, los argumentos están contenidos en una matriz. Aprenderás cómo codificarlos mientras trabajas en este tutorial..

Codificando tus argumentos

Hay una forma específica de codificar los argumentos en la matriz, que es la siguiente:

$ args = array ('parámetro1' => 'valor', 'parámetro2' => 'valor', 'parámetro3' => 'valor');

Debe incluir los parámetros y sus valores entre comillas simples, usar => Entre ellos, y separarlos con una coma. Si se equivoca, es posible que WordPress no agregue todos sus argumentos a la consulta o que obtenga una pantalla en blanco..

Parámetros de estado

Como sabrá si alguna vez convirtió el estado de una publicación de Borrador a Publicada, o tal vez la puso en la papelera, WordPress asigna un estado a cada publicación. Puedes usar el post_status Parámetro para consultar mensajes con uno o más estados..

Los argumentos disponibles son:

  • publicar: Una publicación o página publicada.
  • pendiente: La publicación está pendiente de revisión.
  • borrador: Una publicación en estado borrador.
  • borrador automático: Una publicación recién creada, sin contenido..
  • futuro: Un post para publicar en el futuro..
  • privado: No visible para usuarios que no han iniciado sesión.
  • heredar: Una revisión.
  • basura: El post está en la papelera.
  • alguna: Recupera cualquier estado excepto aquellos de estados de publicación con 'exclude_from_search' establecer en verdadero (es decir,. basura y borrador automático).

Si no especifica un estado en sus argumentos de consulta, WordPress predeterminará publicar; si el usuario actual ha iniciado sesión, también incluirá publicaciones con un estado de privado. Si ejecuta una consulta en las páginas de administración, WordPress también incluirá los estados protegidos, que son futuroborrador y pendiente por defecto.

Entonces, digamos que está ejecutando un sitio de eventos y está utilizando un tipo de evento de publicación personalizado, utilizando la fecha de publicación como la fecha en que se lleva a cabo el evento. Por defecto, WordPress no mostrará ningún evento que aún no haya ocurrido: aunque los hayas programado, su fecha programada será en el futuro, por lo que su estado de publicación será futuro..

Para evitar esto, simplemente use estos argumentos:

$ args = array ('post_type' => 'evento', 'post_status' => 'future');

Esto solo mostrará aquellos eventos que aún no han ocurrido, ya que tendrán la publicar estado. Pero si también desea mostrar los eventos que han ocurrido, puede usar una serie de estados de publicación para incluir más de uno:

$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'));

los post_status El parámetro es esencial cuando estás consultando por archivos adjuntos. Esto es porque tienen un estado de heredar, no publicar. Entonces, para consultar todos los archivos adjuntos, usaría esto:

$ args = array ('post_type' => 'attachment', 'post_status' => 'inherit');

Alternativamente, usted podría reemplazar heredar con alguna que tendría el mismo efecto.

Parámetros de orden

Hay dos parámetros que utiliza para ordenar los mensajes recuperados por WP_Query: orden y orden por. Como es de esperar, orden define el orden en el que se publicarán los mensajes en el bucle, y orden por define qué campo en la base de datos serán ordenados por.

Vamos a empezar por mirar los argumentos de orden.

El parámetro de orden

Hay solo dos argumentos que puedes usar para esto:

  • ASC: orden ascendente de los valores más bajos a los más altos (1, 2, 3; a, b, c).
  • DESC: orden descendente de los valores más altos a los más bajos (3, 2, 1; c, b, a).

Estos son bastante autoexplicativos. Si no incluye un argumento a favor orden, WordPress por defecto a DESC.

El parámetro orderby

Puedes ordenar tus publicaciones por un rango de campos:

  • ninguna: No hay pedido (disponible con la versión 2.8).
  • CARNÉ DE IDENTIDAD: Orden por correo postal. Tenga en cuenta la capitalización.
  • autor: Orden por autor.
  • título: Orden por título.
  • nombre: Orden por correo babosa.
  • tipo: Orden por tipo de publicación.
  • fecha: Orden por fecha.
  • modificado: Orden por última fecha de modificación.
  • padre: Orden por correo / página de identificación del padre.
  • rand: Orden aleatorio.
  • Recuento de comentarios: Orden por numero de comentarios.
  • menu_order: Ordenar por orden de la página. Se usa con mayor frecuencia para Páginas (usando el valor que agrega al metabox en la pantalla Editar Página) y para Adjuntos (usando los campos de números enteros en el cuadro de diálogo Insertar / Cargar Galería de Medios), pero podría usarse para cualquier tipo de publicación menu_order habilitado.
  • meta_valor: Ordenar por el valor de una meta clave (o campo personalizado). Esto solo funciona si también incluye un meta_key parámetro en tus argumentos. Los valores meta se ordenan alfabéticamente y no numéricamente (por lo que 34 vendrán antes que 4, por ejemplo). 
  • meta_value_num: Orden por valor meta numérico. Al igual que con meta_valor, también debe incluir un meta_key argumento en tu consulta.
  • publicar: Conservar orden de ID de identificación dada en el publicar formación.

El valor predeterminado es fecha, es decir, la fecha en que se publicó una publicación.

Así, por ejemplo, si desea ordenar sus publicaciones por título en orden ascendente, usaría estos argumentos:

$ args = array ('orderby' => 'title', 'order' => 'ASC');

Ordenar por campos múltiples

No tienes que apegarte a un solo campo para ordenar tus publicaciones. Para ordenar por varios campos, utiliza una matriz con la orden por parámetro y (opcionalmente) con el orden parámetro si desea ordenar cada campo en un orden diferente.

Entonces, digamos que tiene un campo personalizado de calificaciones que desea utilizar para clasificar en un sitio de comercio electrónico. Puede ordenar por clasificación y luego por título, ambos en orden ascendente, de esta manera:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => 'ASC', 'meta_key' => 'rating');

Tenga en cuenta que he incluido el meta_key argumento para que WordPress sepa qué campo personalizado estoy usando. Esto se hace debido a la forma en que WordPress almacena los metadatos: no en el wp_posts mesa, pero en el wp_postmeta mesa.

Pero, ¿qué sucede si desea ordenar por calificación en orden descendente y luego por título en orden ascendente? Simplemente usa otra matriz:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => array ('DESC', 'ASC'), 'meta_key' => 'rating');

También puede ordenar por múltiples campos cuando no use metadatos de publicación, por ejemplo, para ordenar por tipo de publicación y luego la fecha:

$ args = array ('orderby' => array ('type', 'date'), 'order' => array ('ASC', 'DESC'));

Esto se ordenaría por tipo de publicación en orden ascendente y luego dentro de cada tipo de publicación, por fecha en orden descendente.

Parámetros de paginación

El siguiente conjunto de parámetros a los que llegamos es para la paginación. Estos le ayudan a definir cuántas publicaciones se consultarán y cómo funcionará la paginación cuando se publican..

Los parámetros disponibles son:

  • nopaging (booleano): Mostrar todas las publicaciones o usar paginación. El valor predeterminado es 'falso', es decir, usar la paginación.
  • publicaciones por página (En t): Número de publicaciones a mostrar por página..
  • posts_per_archive_page (En t): Número de publicaciones que se mostrarán por página en las páginas de archivo solamente.
  • compensar (En t): Número de mensajes a desplazar o pasar por encima.
  • paginado (En t): La página del archivo desde la cual se muestran las publicaciones..
  • página (En t): Número de páginas para una portada estática. Muestre las publicaciones que normalmente se mostrarían solo en la página X de una portada estática.
  • ignore_sticky_posts (booleano): Ignorar post stickiness-por defecto a falso.

Echemos un vistazo a algunos ejemplos.. 

Número de mensajes y mensajes de compensación

Por ejemplo, para mostrar las cinco publicaciones más recientes:

$ args = array ('posts_per_page' => '5');

O para mostrar cinco publicaciones recientes excluyendo la más reciente:

$ args = array ('posts_per_page' => '5', 'offset' => '1');

Tenga en cuenta que aunque está obteniendo publicaciones de las seis publicaciones más recientes en la base de datos, todavía usa 'posts_per_page' => '5' ya que ese es el número de mensajes que serán de salida.

Llevando esto un poco más lejos, puedes escribir dos consultas: una para mostrar la publicación más reciente y otra para mostrar diez publicaciones más excluyendo esa publicación:

$ args = array ('posts_per_page' => '1'); // Consulta y bucle ir aquí, así como restablecer las publicaciones. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // La segunda consulta, el bucle y el restablecimiento van aquí..

También puedes usar publicaciones por página para mostrar todos mensajes:

$ args = array ('posts_per_page' => '-1');

Publicaciones pegajosas

Normalmente, sus publicaciones adhesivas se mostrarán primero en cualquier consulta: si desea anular esto, use ignore_sticky_posts:

$ args = array ('posts_per_page' => '5', 'ignore_sticky_posts' => true);

Los argumentos anteriores devolverán las cinco publicaciones más recientes, independientemente de si están pegajosas o no.

Tenga en cuenta que si desea mostrar solo publicaciones pegajosas, deberá utilizar el get_option () función y la publicar argumento de la siguiente manera:

$ sticky = get_option ('sticky_posts'); $ args = array ('posts_per_page' => '5', 'post__in' => $ sticky);

Lo anterior mostraría las últimas cinco publicaciones adhesivas: si hay menos de cinco (por ejemplo, tres) publicaciones adhesivas, no mostrará las publicaciones no adhesivas sino las tres publicaciones recientes más recientes..

Paginación en Archivos

Además de definir cuántas publicaciones se obtienen de la base de datos, también puede usar los parámetros de paginación para definir cómo se paginarán las publicaciones resultantes en las páginas de archivo y búsqueda..

Así, por ejemplo, en una página de archivo, puede usar este código para mostrar 20 publicaciones por página en el archivo:

$ args = array ('posts_per_archive_page' => '20');

Nota la posts_per_archive_page el argumento anulará publicaciones por página.

También puede optar por generar solo las páginas que aparecerían en una página determinada en páginas paginadas. Entonces, por ejemplo, si desea mostrar las 20 publicaciones que aparecerían en la tercera página del ejemplo anterior, usaría esto:

$ args = array ('posts_per_archive_page' => '20', 'paginado' => '3');

Una forma alternativa de consultar las mismas publicaciones sería utilizar el compensar argumento:

$ args = array ('posts_per_page' => '20', 'offset' => '40');

Esto omite las primeras 40 publicaciones (que estarían en las dos primeras páginas de archivo) y recupera las siguientes 20 publicaciones (que estarían en la tercera página de archivo. Una de las cosas que amo de WordPress es cómo a menudo le da más de) una forma de lograr algo!

También puedes desactivar la paginación por completo, para asegurarte de que todas las publicaciones se mostrarán en la misma página:

$ args = array ('nopaging' => true);

Resumen

los WP_Query La clase le brinda mucha flexibilidad a la hora de determinar la cantidad de publicaciones que desea consultar, el orden en que desea mostrarlas y el estado de las publicaciones que desea mostrar..

Algunos de estos argumentos son esenciales para consultar ciertos tipos de publicaciones (por ejemplo, 'post_status' => 'heredado' para adjuntos), mientras que otros simplemente le dan más control sobre la forma en que se ejecutan sus consultas.

Al usar estos parámetros, puede crear consultas personalizadas que hacen mucho más que simplemente publicar las publicaciones más recientes..