() translation by (you can also view the original English article)
Bienvenido/a a la tercera parte de la serie llamada "Dominando WP_Query". En la parte anterior vimos 13 funciones que están relacionadas con la clase WP_Query
. En esta parte revisaremos los hooks de WordPress (filters y actions) que puedes usar junto con WP_Query
.
Sin más dilación, ¡Comencemos!
WP_Query - Filters Relacionados
En la "Referencia de Filters" del Codex, hay 16 filters de Wordpress listados bajo el título "WP_Query Filters". En esta sección vamos a hablar de ellos. Será una sección bastante rápida porque la mayoría de los filters son acerca de las diferentes "cláusulas" de una consulta de base de datos hecha por la clase "WP_Query
".
Volveremos a ellos justo después de ver los filters que no están relacionados con las cláusulas.
Filtrando el Número de Posts Encontrados por la Consulta: found_posts
Este filter te permite cambiar el número de items encontrados sin el límite que tienes con el argumento posts_per_page
de WP_Query
.
Este filtro es particularmente útil para crear paginación personalizada. Vamos a ver qué dice el Codex:
Por ejemplo, si estás declarando
Tiene sentido.
Filtrando la Consulta para Ejecutarla para Devolver los Posts Encontrados: found_posts_query
El número de items encontrados se calcula con el comando SELECT FOUND_ROWS()
en MySQL. Este filtro te permite cambiar el comando a cualquier cosa, en el caso de que quieras calcular el número de items encontrados de una forma diferente.
Filtrando la Consulta SQL Completa: posts_request
Si quieres cambiar por completo la consulta SQL, este es el filter (filtro) que debes usar. Lo que hace básicamente es reescribir la sentencia SQL completamente mediante la clase WP_Query
.
Filtrando el Array la Consulta Devuelve: posts_results
Si quieres modificar el array
PHP que genera WP_Query
con la consulta SQL, puedes utilizar este filtro. Hay un ejemplo estupendo en el Codex que puedes ver para saber cómo funciona.
(Ten en cuenta que este filtro maneja el array raw que es generado por la consulta SQL).
Filtrar el Array de Posts Devueltos: the_posts
De forma diferentes a posts_results
, el filter (filtro) the_posts
espera al array para ser procesado internamente lo que significa que el array se comprueba con mensajes no publicados. Utiliza este si no quieres posts no publicados en tu array.
Filtrando la Lista de Campos ( y la cláusula SELECT
) de la consulta: posts_fields
.
La cláusula SELECT
de una consulta SQL determina qué campos de la base de datos se seleccionarán de las filas de la base resultantes, y este filtro te ayudará a filtrarlos.
Filtrar la Cláusula LIMIT
de la Consulta: post_limits
La cláusula LIMIT
de una consulta SQL establece las limitaciones a la consulta y este filtro te ayuda a filtrarlo.
Filtrando la Cláusula DISTINCT
de la consulta: posts_distinct
La cláusula DISTINCT
de una consulta SQL indica que la consulta debe devolver sólo los resultados diferentes, y este filtro te ayudará a filtrarla. Naturalmente, WP_Query
no devuelve resultados distintos pero cuando se usa este filtro con una función que devuelve "DISTINCT"
, la consulta se ajustará para devolver sólo resultados diferentes.
Filtrar la Cláusula WHERE
de la Consulta: posts_where
La cláusula WHERE
de una consulta SQL se usa para filtrar las sentencias MySQL SELECT
, INSERT
, UPDATE
o DELETE
, y este filtro te ayudará a filtrar este filtro. Mientras que la clase WP_Query
hace todo el trabajo necesario para filtrar los resultados, puedes dar un paso más usando este filtro.
Filtrar la Cláusula WHERE
de la Consulta Después de que se Calcule la Página: posts_where_paged
Este filtro es una iteración del filtro posts_where
, que puedes usar con consultas paginadas.
Filtrado de la Cláusula WHERE
de una Consulta de Búsqueda: posts_search
Otra iteración del filtro posts_where
es el filtro, que puedes usar para modificar la cláusula WHERE
de una consulta usada para obtener resultados de búsqueda en WordPress.
Filtrar la Cláusula JOIN
de la Consulta: posts_join
La cláusula JOIN
de una consulta SQL te permite trabajar tu comando SQL con múltiples tablas de base de datos, y este filtro te ayuda a filtrarlo. Esta es una de las partes avanzadas de MySQL, por lo que no recomiendo usar este filtro a menos que sepas muy bien cómo funciona el JOIN
de MySQL.
Filtrar la Cláusula JOIN
de la Consulta Después de que se Calcule la Página: posts_join_paged
Como posts_where_paged
es una iteración de posts_where
, esta es una iteración del filtro posts_join
que trabaja en las consultas de paginación.
Filtrar la Cláusula ORDER BY
de la Consulta: posts_orderby
La cláusula ORDER BY
de una consulta SQL organiza el orden de la consulta, y este filtro te ayuda a filtrar el orden.
Filtrar la Cláusula GROUP BY
de la Consulta: posts_groupby
La cláusula GROUP BY
de una consulta SQL hace que la consulta devuelva resultados "agrupados" por un campo de la base de datos, y este filtro de ayuda a filtrar cómo agrupar los resultados.
Filtrar Todas las Cláusulas de una Consulta: posts_clauses
Si quieres tratar con todas las cláusulas al mismo tiempo, hay un filtro para ello: posts_clauses
. Este filtro cubre las cláusulas: WHERE
, GROUP BY
, JOIN
, ORDER BY
, DISTINCT
, SELECT
y LIMITS
.
Acciones Relacionadas con WP_Query
Ahora que ya hemos revisado los filtros relacionados con WP_Query
, vamos a ver otro tipo de ganchos: acciones.
Interferir con la Consulta Antes de su eEecución: pre_get_posts
Antes de la consulta sea analizada, se puede interactuar con ella (por ejemplo, inyectar variables de consulta adicional) mediante el uso de esta acción. Vamos a ver un rápido ejemplo de Tom McFarlin para aprender cómo excluir una categoría del bucle principal.
1 |
<?php
|
2 |
|
3 |
function tutsplus_exclude_category( $wp_query ) { |
4 |
|
5 |
/*
|
6 |
* Add the category to an array of excluded categories. In this case, though,
|
7 |
* it's really just one.
|
8 |
*/
|
9 |
$excluded = array( '-1' ); |
10 |
|
11 |
/*
|
12 |
* Note that this is a different, perhaps, cleaner way to write:
|
13 |
*
|
14 |
* $wp_query->set( 'category__not_in', $excluded );
|
15 |
*/
|
16 |
set_query_var( 'category__not_in', $excluded ); |
17 |
|
18 |
}
|
19 |
|
20 |
add_action( 'pre_get_posts', 'tutsplus_exclude_category' ); |
21 |
|
22 |
?>
|
Manejar el Análisis de la Consulta: parse_query
A diferencia de pre_get_posts
, que interviene en la consulta antes de que se establezcan las variables de la consulta, la acción parse_query
gestiona el proceso después de establecer la variable. Por lo tanto, debes utilizar esta acción si quieres comprobar las variables actuales y tomar medidas con sobre a ellas.
Modificar el Objeto Post: the_post
El término the_action
es una poco confuso debido a que es el nombre de un gancho de acción, una función relacionada con WP_Query
y además un método de la clase WP_Query
.
Esta acción, como dice el Codex, nos deja modificar el objeto post justo después de ser consultado y establecido. Usando esta acción, puedes cambiar directamente la salida. Veamos un rápido ejemplo:
1 |
<?php
|
2 |
|
3 |
function tutsplus_featured_badge( $post ) { |
4 |
|
5 |
if ( is_single() && in_category( 'featured' ) ) { |
6 |
|
7 |
echo '<div class="featured-badge">' . __( 'FEATURED', 'tutsplus' ) . '</div>'; |
8 |
|
9 |
}
|
10 |
|
11 |
}
|
12 |
|
13 |
add_action( 'the_post', 'tutsplus_featured_badge' ); |
14 |
|
15 |
?>
|
Fin de la Parte Tres
Las acciones y los filtros son siempre un tema divertido sobre el que hablar y escribir. (Yo se de hecho que mis dos series sobre acciones de WordPress y filtros de WordPress fueron entretenidas para escribir y tuvieron una buena reacción por nuestros lectores). Espero que hayas disfrutado esta parte tanto como yo disfruté escribiéndola.
¿Quieres añadir algo al artículo? Deja a un Comentario en la sección de comentarios de abajo. Y si te gustó el artículo, ¡no olvides compartir con tus amigos!
Nos vemos en la siguiente parte, donde hablaremos sobre las propiedades y métodos de la ¡clase de WP_Query
!