Portuguese (Português) translation by João Fagner (you can also view the original English article)
Bem-vindo à terceira parte da nossa série chamada "Dominando WP_Query". Na parte anterior, desbarávamos as 13 funções do WordPress que estão relacionadas com a classe WP_Query
. Nesta parte, iremos rever os ganchos do WordPress filtros (filters) e ações (actions) que você pode usar em conjunto com WP_Query
.
Assim, sem mais delongas, vamos começar!
Filtros Relacionadas-WP_Query
A "Referência de (Filtros) Filters" no Codex, existem 16 filtros listados sobre o título "WP_Query Filters". Nesta seção, iremos falar sobre eles. Será uma seção bastante rápida porque a maioria dos filtros são sobre diferentes "cláusulas" de uma consulta de banco de dados feito pela classe WP_Query
.
Voltaremos a eles logo após passar pelos filtros que não estão relacionados com as cláusulas.
Filtrando o Número de Posts Encontrados Para a Consulta: found_posts
Este filtro permite que você altere o número de itens encontrados sem o limite que vem do WP_Query
com argumento posts_per_page
.
Este filtro é particularmente útil para a criação de paginação personalizada. Vamos ver o que o Codex diz:
Por exemplo, se você está declarando um valor de offset (deslocamento) personalizado em suas consultas, WordPress NÃO irá deduzir o offset a partir do parâmetro $wp_query->found_posts (por exemplo: se você tem 45 lugares utilizáveis após um deslocamento de 10, WordPress irá ignorar o offset e ainda dar found_posts um valor de 55).
O que faz sentido.
Filtrando e Execultando a Consulta e Recuperando os Posts Encontrados: found_posts_query
O número de itens encontrados é calculada com a SELECT FOUND_ROWS()
comando em MySQL. Este filtro te permite mudar este comando em algo a mais e para o caso de ter que calcular o número de itens encontrados de uma maneira diferente.
Filtrando Toda Consulta SQL: posts_request
Se você quiser alterar a consulta SQL, concluído este é o filtro que você deve usar. Ele basicamente sobrescreve toda consulta SQL criada pela classe WP_Query
.
Filtrando o Array e Retorno da Consulta: posts_results
Se você quiser alterar o array
PHP que gera WP_Query
com a consulta SQL, você pode usar esse filtro. Há um exemplo puro ao longo do Codex para que você possa ver como ele funciona.
(Por favor, note que este filtro manipula um array cru (raw) que é gerado a partir da consulta SQL.)
O Array de Posts obtida do filtro: the_posts
Ao contrário do posts_results
o filtro the_posts
aguarda que o array seja processado internamente, significando que o array deve ser verificados em relação a posts não publicados e posts fixados (sticky). Use isto caso não queira posts não publicados ou posts em seu array.
Filtrando a Lista de Campos (e a Cláusula SELECT
) da Consulta: posts_fields
A cláusula SELECT
de uma consulta SQL determina quais campos do banco de dados serão selecionados a partir das linhas de base de dados resultante e esse filtro te ajuda a filtrá-la.
Filtrando a Cláusula LIMIT
de Consulta: post_limits
A cláusula de LIMIT
de uma consulta SQL define as limitações para a consulta e este filtro te ajuda a filtrá-la.
Filtrando Cláusula DISTINCT
da consulta: posts_distinct
A cláusula DISTINCT
de uma consulta SQL afirma que a consulta deve retornar apenas resultados diferentes e este filtro te ajuda a filtrá-la. Naturalmente WP_Query
não retorna resultados distintos, mas quando você usar este filtro com uma função que retorna "DISTINCT"
a consulta será ajustada para retornar apenas os resultados diferentes.
A cláusula WHERE
da Consulta de Filtragem: posts_where
A cláusula WHERE
de uma consulta SQL é usada para filtragem do MySQL as instruções SELECT
, INSERT
, UPDATE
ou DELETE
e esses filtros te ajudam a filtrar esse filtro. Enquanto a classe WP_Query
faz todo o trabalho necessário para filtrar os resultados, você pode dar um passo maior usando esse filtro.
A cláusula WHERE
da Consulta Após a Paginação é Calculada Filtrando: posts_where_paged
Este filtro é uma iteração para o filtro de posts_where
que você pode usar com consultas de paginação.
Filtragem da Cláusula WHERE
de uma consulta de pesquisa: posts_search
Outra iteração com o filtro posts_where
, este filtro pode ser usado para alterar a cláusula WHERE
de uma consulta que é usada para obter os resultados de pesquisa no WordPress.
A cláusula JOIN
da Consulta de Filtragem: posts_join
A cláusula JOIN
de uma consulta SQL permite que você trabalhe o seu comando SQL dentro de várias tabelas do banco de dados e este filtro te ajuda a filtrá-la. Esta é uma das partes avançadas do MySQL, então eu não recomendo usar este filtro se não souber muito bem como o JOIN
no MySQL funciona.
A cláusula JOIN
da Consulta Após a Paginação é Calculado da Filtragem: posts_join_paged
Assim como posts_where_paged
é uma iteração de posts_where
, isto é uma iteração para o filtro de posts_join
que funciona em consultas de paginação.
A Cláusula ORDER BY
da Consulta de Filtragem: posts_orderby
A cláusula ORDER BY
de uma consulta SQL organiza a ordenação da consulta e este filtro ajuda a filtrar a ordem.
A Cláusula GROUP BY
da Consulta de Filtragem: posts_groupby
A cláusula GROUP BY
de uma consulta SQL faz a consulta retornar resultados "agrupados" por um campo de banco de dados e esse filtro ajuda você a filtrar agrupando os resultados.
Filtrando, Todas as Cláusulas de Consulta: posts_clauses
Se você quer lidar com todas as cláusulas ao mesmo tempo, existe um filtro para isso também: posts_clauses
. Este filtro abrange o WHERE
, GROUP BY
, JOIN
, ORDER BY
, DISTINCT
, SELECT
e clausulas de LIMITS
.
Ações WP_Query-Related
Agora nós revisamos os filtros relacionados a WP_Query
, vamos passar para o outro tipo de gancho: ações (actions).
Interferir na Consulta Antes de Executa-la: pre_get_posts
Antes que a consulta seja iniciada, você pode interagir com ela (por exemplo, inserir variáveis de consulta adicionais) usando esta ação. Vamos ver um exemplo rápido de Tom McFarlin para aprender como excluir uma categoria do loop 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 |
?>
|
Lidar com o Parsing da Consulta: parse_query
Ao contrário de pre_get_posts
, que intervém com a consulta antes das variáveis de consulta serem definidas. A ação de parse_query
manipula o processo após configurar as variáveis de consulta. Assim, você deve usar essa ação caso você queira verificar as variáveis atuais e agir em conformidade com elas.
Modificar Post Object: the_post
O termo the_action
é um pouco confuso porque é o nome de um gancho de ação, uma função relacionados WP_Query
que também é um método da classe WP_Query
.
Esta ação, como o Codex diz nos permite modificar o objeto do post imediatamente após sendo estabelecido a consulta. Usando esta ação, você pode alterar a saída diretamente. Vamos ver um exemplo rápido:
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 |
?>
|
Fim da parte três
Ações e filtros são sempre temas divertidos para falar e escrever. (Eu sei de fato que minhas duas séries sobre ações (actions) do WordPress e filtros (filters) no WordPress foram divertidas de escrever e desperta uma grande reação do nosso leitor). Espero que vocês tenham gostado deste post tanto quanto eu gostei de escrevê-lo.
Quer acrescentar alguma coisa ao artigo? Deixe um comentário abaixo na área de comentários. E se você gostou do artigo, não se esqueça de compartilhar com seus amigos!
Nos veremos na próxima parte, onde vou estar falando sobre as propriedades e métodos da classe WP_Query
!
Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!