Advertisement
  1. Code
  2. WordPress

Argomenti di WP_Query: Campi personalizzati

Scroll to top
Read Time: 8 min
This post is part of a series called Mastering WP_Query.
WP_Query Arguments: Taxonomies
WP_Query Arguments: Date

Italian (Italiano) translation by Roberta C (you can also view the original English article)

Se state seguendo questa serie, abbiamo imparato come è strutturato Wp_Query e come utilizzarlo per scrivere query personalizzate. Per essere in grado di definire ciò che WP_Query recupera dal database, è necessario sapere quali argomenti è possibile utilizzare per interrogare i dati.

WP_Query ha un gran numero di possibili argomenti, che lo rendono estremamente flessibile. Come si può utilizzare per interrogare qualsiasi cosa stia nella tabella wp_posts, ha argomenti per ogni permutazione di query che si desidera eseguire sul sito web.

In questo tutorial guarderemo gli argomenti per i campi personalizzati. Ma in primo luogo, un breve riepilogo su come si codificano gli argomenti di WP_Query.

Un ripasso di come funzionano gli argomenti in WP_Query

Prima di iniziare, vediamo un breve ripasso di come funzionano gli argomenti con WP_Query. Quando si codifica WP_Query nei temi o plugin, è necessario includere quattro elementi principali:

  • gli argomenti della query, usando i parametri che vedremo in questo tutorial
  • la query stessa
  • il loop
  • per finire: la chiusura dei tag if e while e reimpostare i dati del post

In pratica questo dovrebbe risultare simile al seguente:

1
<?php
2
3
$args = array(
4
    // Arguments for your query.

5
);
6
7
// Custom query.

8
$query = new WP_Query( $args );
9
10
// Check that we have query results.

11
if ( $query->have_posts() ) {
12
13
    // Start looping over the query results.

14
    while ( $query->have_posts() ) {
15
16
        $query->the_post();
17
18
        // Contents of the queried post results go here.

19
20
    }
21
22
}
23
24
// Restore original post data.

25
wp_reset_postdata();
26
27
?>

Gli argomenti dicono ad WordPress quali dati recuperare dal database ed è di questo che mi occuperò qui. Concentriamoci ora sulla prima parte del codice:

1
$args = array(
2
    // Arguments for your query.

3
);

Come potete vedere, gli argomenti sono contenuti in un array. Potete imparare come codificarli attraverso questo tutorial.

Codificare gli argomenti

C'è un modo specifico per codificare gli argomenti in un array, che è il seguente:

1
$args = array(
2
    'parameter1' => 'value',
3
    'parameter2' => 'value',
4
    'parameter3' => 'value'
5
);

È necessario racchiudere i parametri ed i loro valori tra virgolette singole, utilizzare => tra di loro, e separarli con una virgola. Se lo si fa nella maniera sbagliata, potrebbe non aggiungere tutti gli argomenti per la query o si potrebbe ottenere uno schermo bianco.

Parametri dei campi personalizzati

I campi personalizzati, anche conosciuti come post metadata, possono usare una classe a parte chiamata WP_Meta_Query. Questo significa che se si vuole eseguire una query solo per i metadati, si possono usare sia WP_Meta_Query che WP_Query (che accede a WP_Meta_Query), mentre se si desidera eseguire una query per i metadati e altri elementi come i post type, è meglio utilizzare WP_Query.

La classe WP_Meta_Query è trattata in dettaglio in questa serie, quindi non entrerò nel dettaglio qui, ma la differenza principale tra l'utilizzo di questo e WP_Query è che WP_Query consente di creare alcune semplici argomenti senza l'utilizzo di array nidificati.

Parametri per semplici query di campi personalizzati

I parametri principali per usare WP_Query per eseguire query ai campi personalizzati sono i seguenti:

  • meta_key (string): chiave del campo personalizzato.
  • meta_value (string): valore del campo personalizzato.
  • meta_value_num (number): valore (numerico) del campo personalizzato.
  • meta_compare (string): operatore per testare il 'meta_value'. Possibili valori sono '=''!=''>''>=''<''<=''LIKE''NOT LIKE''IN''NOT IN''BETWEEN''NOT BETWEEN''NOT EXISTS''REGEXP''NOT REGEXP' or 'RLIKE'. Il valore di default è  '='.

Usare questi parametri per eseguire una semplice query dei campi personalizzati. Se per esempio vogliamo visualizzare i post con un campo personalizzato di chiave key1 (indipendentemente dal suo valore), usiamo questo argomento:

1
$args = array(
2
    'meta_key' => 'key1'
3
);

Questo dovrebbe restituire tutti i post con un campo personalizzato con la chiave key1, qualunque sia il valore.

Se si voleva specificare un valore è necessario aggiungere un argomento extra:

1
$args = array(
2
    'meta_key' => 'key1',
3
    'meta_value' => 'value1'
4
);

Questo dovrebbe restituire tutti i post con un campo personalizzato con la chiave key1 e il valore value1.

In alternativa, si potrebbero voler prendere tutti i post con un campo personalizzato con il valore value1, indipendentemente dalla chiave. Questo potrebbe essere utile quando abbiamo più campi personalizzati con valori duplicati:

1
$args = array(
2
    'meta_value' => 'value1'
3
);

Quindi, come si può vedere, è possibile eseguire query anche solo per le chiavi o per i valori dei campi personalizzati — non bisogna sempre specificare entrambi.

Usare l'argomento meta_compare

Avrete notato sopra che ci sono un sacco di potenziali parametri per l'argomento meta_compare, e il loro uso potrebbe non essere sempre immediatamente evidente. Diamo uno sguardo a quelli che è possibile utilizzare più spesso:

  • =: Uguale. Questo è quello di default, quindi se non si include un argomento meta_compare, questo è quello che userà WP_Query.
  • !+: Non è uguale a.
  • >: Più grande di
  • >=: iù grande o uguale a.
  • <: Minore di.
  • <=: Minore o uguale a.
  • LIKE: Questo ignorerà il caso del valore usato, e si può anche utilizzare con caratteri wildcard per trovare valori come il valore che stai cercando.
  • NOT LIKE: Funziona in maniera simile a LIKE ma all'opposto.
  • IN: Usare questo con un array nell'argomento 'value' per trovare post con uno o più dei valori nell'array.
  • BETWEEN: Usato con un array di due valori numerici (specificati nell'argomento meta_value ) trova post con campi personalizzati dal valore tra i due valori indicati (ma non uguali ad essi)
  • NOT BETWEEN: Esegue query ai post con valori dei campi personalizzati fuori da una serie di due numeri specificati dall'argomento meta_value.

Diamo uno sguardo ad alcuni esempi d'so di questo argomento.

Il primo, è possibile escludere chiavi o valori dei campi personalizzati usando l'argomento meta_compare. Quindi, per recuperare tutti i post ad eccezione di quelli con un campo personalizzato con la chiave key1, si può usare questo:

1
$args = array(
2
    'meta_key' => 'key1',
3
    'meta_compare' => '!='
4
);

Si potrebbe anche usare il valore 'NOT IN' per l'argomento meta_compare, che può essere utilizzato anche con una serie di valori multipli:

1
$args = array(
2
    'meta_key' => 'key1, key2',
3
    'meta_compare' => 'NOT IN'
4
);

Questo eseguirà la query dei post che non hanno campi personalizzati con i valori key1 o key2. Se si vuole essere più specifici, magari eseguendo query ai post con un campo personalizzato e non un altro, è possibile fare degli array annidati, che vedremo a breve.

L'esempio sopra usa valori non-numerici. È possibile utilizzare WP_Query con campi personalizzati con valori numerici, non solo per andare a prendere i post con un campo personalizzato con quel valore, ma anche per andare a prendere quelli con campi personalizzati con valori superiori o inferiori. È possibile utilizzarlo per esempio in un negozio, cercare prodotti sopra o sotto una fascia di prezzo.

Per trovare post con un valore sopra un dato numero, usiamo qualcosa come questo:

1
$args = array(
2
    'meta_key' => 'numkey',
3
    'meta_value' => '100',
4
    'meta_compare' => '>'
5
);

Questo dovrebbe restituire tutti i post con un campo personalizzato con la chiave numkey e valore superiore a 100. Se avessimo voluto eseguire la query per il valore 100 o superiori, avremmo dovuto usare 'meta_compare' => '>='.

È inoltre possibile trovare i post i cui campi personalizzati hanno valori compresi tra due numeri specificati utilizzando l'argomento BETWEEN e un array:

1
$args = array(
2
    'meta_key' => 'numkey',
3
    'meta_value' => array (
4
        '100',
5
        '200'
6
    ),
7
    'meta_compare' => 'BETWEEN'
8
);

 Questo trova tutti i post con un valore tra 100 e 200 nel campo personalizzato numkey.

Query nidificate dei campi personalizzati

Se si vogliono eseguire query per più di un campo personalizzato o utilizzare più di un operatore, è possibile usare un array nidificato.

Questi prendono la seguente struttura:

1
$args = array(
2
    'meta_query' => array(
3
        'relation' => '', // Optional argument.

4
        array(
5
            // `meta_query` arguments go here.

6
        )
7
    )
8
);

La maniera in cui si struttura l'argomento 'meta_query' in WP_Query è esattamente la stessa che si usa per la classe WP_Meta_Query, che è trattata in un'esercitazione successiva in questa serie, non la replicherò qui.

Dalla versione 4.1 di WordPress è possibile utilizzare anche più livelli di array annidati per creare query sempre più complesse e precise. Qualcosa come questo:

1
$args = array(
2
    'meta_query' => array(
3
        'relation' => '', // Optional argument.

4
        array(
5
            'relation' => '',
6
            array (
7
                // First set of `meta_query` arguments go here.

8
            ),
9
            array (
10
                // Second set of `meta_query` arguments go here.

11
            )
12
        )
13
    )
14
);

Questo ci permette di utilizzare diverse relazioni a diversi livelli nella query, ad esempio una query per tutti i post con un valore chiave in un campo personalizzato, o con entrambi i due valori chiave in un altro campo personalizzato . Questo è coperto più dettagliatamente, con esempi, nell'esercitazione sulla classe WP_Meta_Query, che fa parte di questa serie.

Riepilogo

Usare la classe WP_Query per interrogare i metadati dei post (o campi personalizzati) fornisce un sacco di flessibilità, con più argomenti potenziali combinati con un numero di operatori si può interrogare il database esattamente come che si desidera.

Se si desiderano utilizzare solo gli argomenti dei post metadati nella query (e non combinarli con altri argomenti, ad esempio con i tipi di post), è anche possibile utilizzare la classe WP_Meta_Query, che è descritta più avanti in questa serie.

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.