Italian (Italiano) translation by Roberta C (you can also view the original English article)
Benvenuti alla terza parte della nostra serie chiamata "Padroneggiare WP_Query". Nella parte precedente, abbiamo visto 13 funzioni di WordPress relazionate alla classe WP_Query
. In questa parte, vedremo gli hook (ganci) di WordPress (filtri e azioni) che è possibile utilizzare in combinazione con WP_Query
.
Così, senza ulteriori indugi, cominciamo!
Filtri correlati a WP_Query
Nel "Filters Reference" del Codex, sono elencati 16 filtri di WordPress sotto il titolo «WP_Query Filters». In questa sezione, parleremo di questi. Sarà una sezione abbastanza veloce perché la maggior parte dei filtri riguarda le differenti "clausole" di una query di database effettuata dalla classe WP_Query
.
Ci torneremo sopra dopo proprio dopo abbiamo passato in rassegna i filtri che non sono correlati alle clausole.
Filtrare il numero di post trovato nella Query: found_posts
Questo filtro consente di modificare il numero di elementi trovati senza il limite che viene dall'argomento posts_per_page
di WP_Query
.
Questo filtro è particolarmente utile per creare l'impaginazione personalizzata. Vediamo cosa dice il codice:
Per esempio, se si dichiara un valore di offset personalizzato nelle query, WordPress non dedurrà l'offset dal parametro $wp_query-> found_posts (ad esempio, se abbiamo 45 post utilizzabili dopo un offset pari a 10, WordPress ignorerà l'offset e assegnerà a found_posts un valore di 55).
Ha un senso.
Filtrare la Query da eseguire per recuperare i post trovati: found_posts_query
Il numero di elementi trovati è calcolato con il comando SELECT FOUND_ROWS()
in MySQL. Questo filtro consente di modificare questo comando in qualcos'altro, nel caso in cui sia necessario calcolare il numero di elementi trovati in un modo diverso.
Filtrare l'intera Query SQL: posts_request
Se si desidera modificare la query SQL completa, questo è il filtro che è necessario utilizzare. Questo in pratica sovrascrive l'intera query SQL composta dalla classe WP_Query
.
Filtrare l'Array restituito dalla Query: posts_results
Se volete modificare l'array
PHP che WP_Query
genera con la query SQL, è possibile utilizzare questo filtro. Qui un esempio dal Codex in maniera tale da vedere come funziona.
(Si prega di notare che questo filtro gestisce l'array grezzo che viene generato dalla query SQL).
Filtrare l'array dei post estratti: the_posts
A differenza di posts_results
, il filtro the_posts
attende che l'array sia elaborato internamente, ciò significa che l'array viene controllata da post non pubblicati e in evidenza. Utilizzare questo se non si vogliono post non pubblicati nell'array.
Filtrare l'elenco dei campi (e la clausola SELECT
) della Query: posts_fields
La clausola SELECT
di una query SQL determina quali campi del database saranno selezionati dalle righe del database risultante, e questo filtro consente di filtrarne i dati.
Filtrare la clusola LIMIT
della Query: post_limits
La clausola LIMIT
di una query SQL imposta le limitazioni per la query, e questo filtro consente di filtrarne i dati.
Filtrare la clausola DISTINCT
della Query: posts_distinct
La clausola DISTINCT
di una query SQL afferma che la query deve restituire solo risultati diversi, e questo filtro consente di filtrarne i dati. Naturalmente, WP_Query
non restituisce risultati distinti ma quando si utilizza questo filtro con una funzione che restituisce "DISTINCT
", la query verrà regolata per restituire solo i risultati diversi.
Filtrare la clausola WHERE
della Query: posts_where
La clausola WHERE
di una query SQL viene utilizzata per filtrare le dichiarazioni MySQL SELECT
, INSERT
, UPDATE
o DELETE
, e questo filtro consente di filtrare questo filtro. Mentre la classe WP_Query
fa tutto il lavoro necessario per filtrare i risultati, ci si può portare aventi utilizzando questo filtro.
Filtrare la clausola WHERE
della Query dopo che il Paging è calcolato: posts_where_paged
Questo filtro è un'iterazione del filtro posts_where
, che è possibile utilizzare con chiamate query
Filtrare la clausola WHERE
di una Query di ricerca: posts_search
Questo filtro un'altra iterazione del filtro posts_where
, che è possibile utilizzare per modificare la clausola WHERE
di una query che viene utilizzata per ottenere i risultati di una ricerca in WordPress.
Filtrare la clausola JOIN
della Query: posts_join
La clausola JOIN
di una query SQL consente di lavorare il nostro comando SQL all'interno di più tabelle di database, e questo filtro consente di filtrarne i dati. Questa è una delle parti più avanzate di MySQL, quindi si consiglia di non utilizzare questo filtro se non si sa molto bene come lavora MySQL JOIN
.
Filtrare la clausola JOIN
della Query dopo che il Paging è calcolato: posts_join_paged
Come posts_where_paged
è un'iterazione del posts_where
, questa è un'iterazione dell filtro posts_join
che funziona su query di paging.
Filtrare la clausola ORDER BY
della Query: posts_orderby
La clausola ORDER BY
di una query SQL organizza l'ordinamento della query, e questo filtro consente di filtrarne l'ordine.
Filtrare la clausola GROUP BY
della Query: posts_groupby
La clausola GROUP BY
di una query SQL restituisce i risultati "raggruppati" da un campo del database e questo filtro aiuta a filtrare il modo in cui vengono raggruppati i risultati.
Filtrare tutte le clausole della Query: posts_clauses
Se si vogliono trattare con tutte le clausole allo stesso tempo, c'è un filtro per questo: posts_clauses
. Questo filtro copre le clausule WHERE
, GROUP BY
, JOIN
, ORDER BY
, DISTINCT
, SELECT
e LIMITS
.
Azioni correlate a WP_Query
Ora che abbiamo esaminato i filtri relativi a WP_Query
, passiamo all'altro tipo di ganci: le azioni.
Interferire con la Query prima che parta: pre_get_posts
Prima che la query venga analizzata, è possibile interagire con essa (ad es. inserire variabili aggiuntive) utilizzando questa azione. Vediamo un esempio veloce da Tom McFarlin per imparare a escludere una categoria dal loop principale:
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 |
?>
|
Gestire il Parsing della Query: parse_query
A differenza di pre_get_posts
, che interviene sulla query, prima che vengono impostate le variabili, l'azione parse_query
gestisce il processo una volta impostate le variabili di query. Pertanto, è necessario utilizzare questa azione se si desiderano controllare le variabili correnti e agire in accordo con esse.
Modificare l'oggetto del Post: the_post
Il termine the_action
genera un po' di confusione perché è il nome di un'azione, di una una funzione WP_Query
e anche di un metodo della classe WP_Query
.
Questa azione, come il Codex dice, ci permette di modificare l'oggetto del post immediatamente dopo che è stato interrogato ed impostato. Utilizzando questa azione, è possibile modificare l'output direttamente. Vediamo un rapido esempio:
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 |
?>
|
Fine della terza parte
Azioni e filtri sono sempre un argomento divertente di cui parlare e scrivere. (Lo so per certo, le due mie serie sulle azioni di WordPress e i filtri di WordPress erano divertenti da scrivere e hanno ottenuto una buona reazione da parte dei nostri lettori). Spero che vi siate divertiti in questo tutorial tanto quanto mi sono divertito io a scriverlo.
Vuoi aggiungere qualcosa all'articolo? Lascia un commento nella sezione commenti qui sotto. E se ti è piaciuto l'articolo, non dimenticare di condividerlo con i tuoi amici!
Ci vediamo nella prossima parte, dove parlerò delle proprietà e i metodi della classe WP_Query!