Advertisement
  1. Code
  2. WordPress

Dominando WP_Query: Actions y Filters

Scroll to top
Read Time: 6 min
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Related Functions
Mastering WP_Query: Properties and Methods

() 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!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.