Dominar WP_Query Una Introducción

De forma predeterminada, WordPress ejecutará una consulta en cada página que muestra su sitio, cuya naturaleza estará determinada por el tipo de página que se esté viendo. Entonces, si se está viendo una página estática, WordPress ejecuta una consulta para mostrar la página con el ID correspondiente, mientras que si se está viendo una página de archivo, la consulta recuperará todas las publicaciones en ese archivo..

Pero a veces quieres hacer las cosas un poco diferente. Ya sea en el contenido principal de su página o en cualquier otro lugar de la página (como en la barra lateral o en el pie de página), es posible que desee mostrar algún contenido específico que no sea el resultado de la consulta estándar..

La buena noticia es que WordPress lo hace posible con el WP_Query clase. Esta clase le proporciona una gran cantidad de parámetros que puede usar para definir qué contenido desea generar (que no debe limitarse a publicaciones) y luego escribir un bucle que mostrará el contenido exactamente como lo desea..

En esta serie de diecinueve partes sobre Masterización. WP_Query, Baris Unver y yo te llevaremos a través de los entresijos de WP_Query de modo que una vez que haya completado la serie, podrá usarla en una variedad de escenarios y ajustar la forma en que WordPress consulta los datos en la base de datos de su sitio.

En esta introducción cubriré lo siguiente:

  • Que es WP_Query?
  • Por que usar WP_Query?
  • Problemas potenciales / qué tener en cuenta.

¿Qué es WP_Query??

WP_Query Es una clase proporcionada por WordPress. El hecho de que sea una clase significa que al usarla, puede acceder rápidamente a las variables, verificaciones y funciones que se han codificado en esa clase en el núcleo de WordPress, sin tener que preocuparse de escribir todo ese código. Esto hace que su código sea más eficiente y confiable..

Si quieres entender exactamente como WP_Query Funciona bajo el capó, puedes ver su código en el incluye / query.php expediente.

WP_Query consta de cuatro elementos principales:

  • Los argumentos para la consulta, utilizando parámetros que se cubrirán en detalle en esta serie.
  • la propia consulta
  • El bucle, que generará contenido de la publicación, títulos o lo que quiera mostrar.
  • 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 (); ?>

Podría definir sus argumentos al escribir la consulta en sí, pero prefiero definirlos primero, ya que mantiene las cosas ordenadas.

Restablecimiento de datos de publicación

En el ejemplo anterior he añadido wp_reset_postdata () después de cada consulta. Esto es importante porque restablece la consulta a la consulta principal que se está ejecutando en esa página. 

Por ejemplo, si estás usando WP_Query para ejecutar una consulta en la barra lateral, usando wp_reset_postdata () efectivamente le dice a WordPress que todavía estamos en cualquier página que se esté viendo y que debería funcionar con la consulta predeterminada para esa página. 

Si no hace esto, cualquier otra consulta que se ejecute en la página (incluida la consulta predeterminada) podría fallar, y cualquier etiqueta condicional que compruebe qué tipo de página se está viendo no funcionará.

¿Por qué usar WP_Query??

Si no has usado el WP_Query clase antes, puede que se pregunte por qué debería comenzar. Aquí me centraré en dos aspectos de esto: por qué usar WP_Query sobre otros métodos de escritura de consultas personalizadas y escenarios en los que es posible que desee utilizar WP_Query.

¿Por qué usar WP_Query sobre otros métodos??

WP_Query no es el único método para crear una consulta personalizada. Hay cuatro más:

  • pre_get_posts
  • get_posts ()
  • get_pages ()
  • query_posts () (que deberías evitar, como explicaré)

No voy a entrar en muchos detalles sobre cómo funciona cada uno de estos, pero es útil saber cuándo se usan:

  • pre_get_posts Es un gancho que modifica la consulta principal. Puede usarlo con una etiqueta condicional para verificar si se está viendo un cierto tipo de página (por ejemplo, la página de inicio) y luego usarla para enmendar la consulta que se está ejecutando (por ejemplo, para eliminar las tres publicaciones más recientes, si está re mostrarlos en otro lugar en la página). Es una forma muy eficiente de modificar la consulta principal y debería ser su primer puerto de escala si eso es lo que quiere hacer. Sin embargo, no puedes usarlo para crear una consulta completamente nueva..
  • get_posts () y get_pages () Son muy similares, con la diferencia principal siendo obvia por sus nombres. Estas etiquetas de plantilla realmente usan el WP_Query clase, por lo que son otra forma de hacer lo mismo, pero agrega un paso adicional porque llaman a la WP_Query Clase en lugar de que lo hagas directamente. Solo puede usarlos para consultar publicaciones o páginas, mientras que WP_Query en sí es más poderoso y le permite consultar casi cualquier cosa contenida en su base de datos.
  • query_posts () modifica la consulta principal, pero no debe utilizarse en complementos o temas. Esto se debe a que arroja la consulta principal y comienza de nuevo, reemplazando la consulta principal con una nueva consulta. También es propenso a errores, especialmente con la paginación, y es ineficiente y afectará los tiempos de carga de su página. Si necesita modificar la consulta principal, use pre_get_posts en su lugar, y si desea crear una consulta completamente nueva, utilice WP_Query.

El diagrama a continuación, publicado por Andrey "Rarst" Savchenko bajo la licencia de Creative Commons, da algún sentido a esto:

Cuando puedes usar WP_Query

Hay muchos escenarios cuando WP_Query vendrá útil, y no puedo cubrirlos todos aquí, pero aquí hay una descripción general:

  • Para agregar una lista de publicaciones relacionadas en la publicación actual, por ejemplo, una lista de todas las publicaciones en la misma categoría.
  • Para crear dos bucles en la misma página: por ejemplo, una página de preguntas frecuentes con los títulos de las preguntas en la parte superior y el contenido debajo..
  • Para crear una lista personalizada de publicaciones recientes en la barra lateral o pie de página de su sitio, cuando el widget de Publicaciones recientes no haga lo que necesita (o prefiera codificarlo usted mismo).
  • Para crear consultas personalizadas para taxonomías, usar más de una taxonomía para definir lo que se muestra.
  • Para consultar tipos de publicaciones que no son generados por la consulta predeterminada, como archivos adjuntos.
  • Para crear páginas personalizadas con una cantidad de consultas para diferentes tipos de contenido, como lo he hecho en este sitio de ejemplo para un cliente.

Algunas advertencias

los WP_Query la clase es genial Creo muchos sitios que necesitan consultas personalizadas, así que lo uso con frecuencia. Pero no viene sin sus inconvenientes. Aquí hay algunas cosas que debe tener en cuenta:

  • Si todo lo que desea hacer es cambiar la forma en que se muestran las publicaciones para un tipo de contenido o archivo en particular, no use WP_Query. En su lugar, simplemente cree un archivo de plantilla para ese tipo de archivo o contenido, y modifique el bucle en ese archivo de plantilla.
  • Si desea mostrar algunas publicaciones más o menos de las que normalmente se mostrarían en una página de archivo (por ejemplo, no muestra una categoría en particular), no use WP_Query para crear una consulta completamente nueva. En lugar de usar pre_get_posts para modificar la consulta principal, junto con una etiqueta condicional para señalar dónde quiere hacerlo exactamente.
  • Tenga cuidado de ejecutar demasiadas consultas en una página. Teóricamente, podría crear una página con cientos de consultas personalizadas, pero solo piense en la carga del servidor. Si necesita más de cuatro o cinco consultas en una página, puede considerar crear páginas adicionales.

Resumen

los WP_Query class es una herramienta poderosa y extremadamente útil para crear consultas personalizadas y hacer que su sitio de WordPress se comporte exactamente como lo desea. Como hemos visto, hay ocasiones en las que usaría otros métodos para crear consultas personalizadas, pero tiene una amplia gama de usos..

En el resto de esta serie, lo guiaremos a través de los detalles de cómo usar WP_Query y aprovechar al máximo.