Advertisement
  1. Code
  2. WordPress

Padroneggiare WP_Query: Azioni e Filtri

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

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 SELECTINSERTUPDATE 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, SELECTLIMITS.

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!

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.