En esta parte de esta serie sobre WP_Query
, aprenderás a usar WP_Query
para consultar por mensajes, páginas y tipos de mensajes personalizados. Puede consultar publicaciones y páginas específicas o puede ejecutar una consulta para devolver publicaciones de uno o más tipos de publicaciones..
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:
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..
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..
Comencemos con el escenario más simple: ejecutar una consulta para encontrar una publicación o página específica.
Para encontrar una publicación específica (o un conjunto de publicaciones), tiene dos opciones:
pag
(En t): Usar ID de publicación.nombre
(cuerda): Usar posbanda.Puede usar estos parámetros con cualquier tipo de publicación, incluidas publicaciones, páginas, archivos adjuntos y tipos de publicaciones personalizadas. Por defecto, WordPress consultará la 'enviar'
Escriba el tipo y no devuelva las páginas ni los tipos de publicación personalizados: si desea hacer esto, deberá agregar más argumentos o usar un argumento diferente, que veré más adelante en este tutorial..
Entonces, para devolver una publicación específica, usarías uno de estos:
$ args = array ('p' => '32');
o:
$ args = array ('name' => 'post_slug');
Tenga en cuenta que el nombre
parámetro toma la posposición como su argumento, no su titulo.
Utilizando la nombre
El parámetro facilita la identificación de lo que su consulta obtendrá de la base de datos cuando vuelva a visitar su código en una fecha posterior, pero existe el riesgo de que no funcione si uno de los usuarios de su sitio cambia la posposición. La ID de la entrada no se puede cambiar, por lo que es más seguro.
Para consultar una página específica tienes dos opciones de nuevo:
page_id
(En t): Usar ID de página.Nombre de la página
(cuerda): Usa la barra de página.Por lo tanto, para ejecutar una consulta obteniendo solo una página específica de la base de datos, usaría uno de estos:
$ args = array ('page_id' => '20');
o:
$ args = array ('pagename' => 'page_slug');
Para ejecutar una consulta para una publicación de otro tipo de publicación, incluido un tipo de publicación personalizada, también usaría tipo de mensaje
parámetro. Cubriré esto con un poco más de detalle más adelante en este tutorial, pero en breve, para consultar una sola publicación en el producto
tipo de mensaje personalizado, usaría esto:
$ args = array ('p' => '46', 'post_type' => 'product');
O para consultar un archivo adjunto, usaría:
$ args = array ('p' => '46', 'post_type' => 'attachment');
A veces es posible que necesite recuperar todas las páginas que son secundarias de una página determinada, por ejemplo, si su sitio tiene una estructura de página jerárquica y desea mostrar una lista en cada página de los secundarios de esa página..
Nota: No harías esto con las publicaciones, ya que no son jerárquicas, aunque puedes hacerlo con un tipo de publicación personalizada si es jerárquico.
Tienes tres argumentos que puedes usar para hacer esto:
post_parente
(En t): Use la ID de página para devolver solo páginas secundarias. Se establece en 0 para devolver solo las entradas de nivel superior.post_parent__in
(formación): Utilice una matriz de ID de publicación.post_parent__not_in
(formación): Utilice una matriz de ID de publicación.Echemos un vistazo a cada uno de ellos..
El primero, post_parente
, le permite consultar las páginas que son hijos de una página específica.
Entonces, para encontrar todas las páginas que son hijos de una página dada, usarías esto:
$ args = array ('post_type' => 'page', 'post_parent' => '2');
Tenga en cuenta que tiene que incluir el tipo de mensaje
argumento como el tipo de publicación predeterminado que WP_Query
busca es enviar
.
Llevando esto más lejos, así es como lo usarías para encontrar hijos de la página actual:
$ current_page_id = get_the_ID (); $ args = array ('post_type' => 'page', 'post_parent' => $ current_page_id);
También puede usar este parámetro para identificar las páginas de nivel superior, es decir, aquellas sin un padre:
$ args = array ('post_type' => 'page', 'post_parent' => '0');
Pero, ¿qué pasa si quieres identificar a los niños de varias páginas? Puedes hacer esto también, con la post_parent__in
parámetro. Esto toma una serie de ID de publicación.
Entonces, para consultar los hijos de dos de tus páginas, usarías esto:
$ args = array ('post_type' => 'page', 'post_parent__in' => array ('2', '4'));
También puede excluir páginas secundarias de su consulta, usando la post_parent__not_in
parámetro:
$ args = array ('post_type' => 'page', 'post_parent__not_in' => array ('2', '4'));
También es común ejecutar una consulta para incluir o excluir varias publicaciones. Tienes dos argumentos que puedes usar para esto:
publicar
(formación): Usar ID de publicación.post__not_in
(formación): Usar ID de publicación.los publicar
argumento se puede utilizar para todos los tipos de publicación y toma una matriz de ID. Entonces, para generar una lista de publicaciones específicas, usarías esto:
$ args = array ('post__in' => array ('36', '52', '246', '354'));
Nota: si usa este argumento para obtener publicaciones, WordPress seguirá obteniendo publicaciones pegajosas, incluso si no están en su lista. Para omitirlos, utiliza la ignore_sticky_posts
argumento:
$ args = array ('post__in' => array ('36', '52', '246', '354'), 'ignore_sticky_posts' => 'true');
los post__not_in
el argumento funciona de una manera similar, nuevamente tomando una matriz de ID de publicación, pero generará todo lo demás excepto las publicaciones enumeradas. Normalmente lo combinarías con otros argumentos para evitar la salida de una gran lista de publicaciones..
Así que para consultar todas las publicaciones de la producto
tipo de publicación, pero excluye algunos
$ args = array ('post_type' => 'product', 'post__not_in' => array ('36', '52', '246', '354'));
Entonces, para combinar esto con uno de nuestros ejemplos anteriores, aquí está cómo consultar para todas las páginas de nivel superior excepto la actual:
$ current_page_ids = array (get_the_ID ()); $ args = array ('post_parent' => '0', 'post__not_in' => $ current_page_ids);
Tenga en cuenta que si también ha registrado un tipo de publicación jerárquica, deberá incluir el tipo de mensaje
parámetro en este código para solo consultar las páginas.
En algunos de los ejemplos anteriores he usado el tipo de mensaje
Parámetro para identificar mensajes de un determinado tipo. Echemos un vistazo a los argumentos que puedes usar con ese parámetro:
enviar
: Una publicación.página
: Una página.revisión
: Una revisión.adjunto archivo
: Un adjunto.nav_menu_item
: Un elemento del menú de navegación.alguna
: Recupera cualquier tipo excepto revisiones y tipos con 'exclude_from_search'
ajustado a cierto
cuando se registraron.producto
).Como hemos visto anteriormente, puede utilizar este parámetro con otros argumentos para que su consulta sea más específica..
Entonces, para dar un ejemplo simple, aquí le mostramos cómo buscaría todas las páginas de su sitio:
$ args = array ('post_type' => 'page');
La consulta de un tipo de publicación personalizada es simple: use el nombre que le dio al tipo de publicación cuando lo registra, no El título que se utiliza en los menús de administración. Así que digamos que registraste tus tipos de publicaciones de productos usando register_post_type ()
como sigue:
función register_product () $ args = array ('name' => __ ('Products', 'tutsplus'), 'singular_name' => __ ('Product', 'tutsplus')); register_post_type ('producto', $ args);
El valor que utiliza para el tipo de mensaje
argumento al consultar productos no es 'Producto'
o 'Productos'
pero 'producto'
:
$ args = array ('post_type' => 'product');
De forma predeterminada, si intenta ejecutar una consulta de archivos adjuntos, no funcionará, ya que WordPress establece el post_status
de adjuntos a heredar
y WP_Query
por defecto a 'post_status' => 'publish'
a menos que especifique lo contrario. Así que si quieres consultar los archivos adjuntos, debe incluir la post_status
argumento:
$ args = array ('post_type' => 'attachment', 'post_status' => 'inherit');
Tenga en cuenta que también podría utilizar alguna
en lugar de heredar
.
Utilizando WP_Query
Crear consultas personalizadas para publicaciones y tipos de publicaciones es algo que hago mucho. Como ha visto en los ejemplos aquí, hay muchas posibilidades:
Hay muchas más posibilidades utilizando los argumentos que se cubren aquí, pero esto debería darle una oportunidad..