Meta_Query di WordPress: tutto ciò che devi sapere

Pubblicato: 2022-04-30

Uno degli strumenti più potenti in WordPress è la possibilità di aggiungere campi personalizzati ai post. Molti sviluppatori utilizzano campi personalizzati avanzati o meta campi personalizzati per i post.

In questo post esamineremo come interrogare i post per campo personalizzato utilizzando la funzione meta_query in WordPress. Questo è utile per i siti con molte funzionalità personalizzate.


Interroga i post in base a un metavalore

Probabilmente il modo più popolare per interrogare i post con un campo personalizzato è prendere di mira un meta valore specifico. Ad esempio, supponiamo di avere un sito in cui i post hanno un campo personalizzato utilizzato per determinare se un post è "in primo piano". Questo è comune quando si crea una sezione in primo piano su un sito WordPress.

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'featured_post' ,
'value' => 'yes' ,
'compare' => '='
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value.php hosted with by GitHub

Ovviamente il codice sopra varia a seconda del titolo dei campi e delle meta chiavi, ma la "chiave" è il nome del campo personalizzato mentre il "valore" è ciò per cui stiamo interrogando i post. Il campo "confronta" viene utilizzato per una serie di operazioni di confronto che esamineremo più avanti nel post.

L'uso di questo in WP_Query ci consentirà di ottenere un array che è ottimo per le funzioni di loop per visualizzare i post. In questo post esamineremo solo le funzioni meta_query anziché come visualizzare l'output di WP_Query.


Interroga i post in base a più meta valori

Se vuoi controllare un valore di una chiave meta rispetto a più valori, è meglio utilizzare l'operatore 'IN'.

<?php
$ meta_query_args = array (
'meta_query' => array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-query-post-meta-value-multiple.php hosted with by GitHub

Interroga i post con più meta chiavi

Ora che abbiamo interrogato i post con una singola meta chiave, eseguiamone uno con più campi/chiavi interrogati. Ciò ti consentirà di interrogare i post in base a più campi personalizzati. Questo esempio combina entrambe le cose che abbiamo fatto sopra annidando le query in un array e aggiungendo una "relazione" alla meta_query.

<?php
$ meta_query_args = array (
'meta_query' => array (
'relation' => 'AND' ,
array (
array (
'key' => 'city_name' ,
'value' => array ( 'New York City' , 'London' , 'San Francisco' ),
'compare' => 'IN'
),
array (
'key' => 'featured_post' ,
'value' => true ,
'compare' => '='
)
)
)
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-meta-query-multiple-keys.php hosted with by GitHub

Il campo "relazione" può essere impostato su "AND" o "OR" in modo da poter richiedere che tutte le condizioni siano soddisfatte o solo una.


Operatori di confronto di meta query

Ci sono alcuni operatori che ti saranno utili per interrogare i tuoi post tramite meta query. Ecco una rapida ripartizione di ciascun operatore di confronto e come utilizzarli.

  • '=' Interroga le chiavi meta che equivalgono a un valore meta
  • '!=' Interroga le chiavi meta che NON sono uguali a un valore meta
  • '>' Interroga le chiavi meta che sono maggiori del valore meta
  • '>=' Interroga le chiavi meta che sono maggiori e uguali al valore meta
  • '<' Interroga le chiavi meta che sono inferiori al valore meta
  • '<=' Interroga le chiavi meta che sono minori e uguali al valore meta
  • 'MI PIACE' interroga le chiavi meta che contengono una parola/frase (ad esempio, la query su "rosso" corrisponderebbe alle frasi "rosso", "sembra rosso" e "stile rosso")
  • 'NON MI PIACE' L'opposto di sopra
  • 'IN' Interroga le chiavi meta in cui il valore esiste in una matrice
  • 'NOT IN' Interroga le chiavi meta in cui il valore non esiste in una matrice
  • 'BETWEEN' Interroga le chiavi meta in cui il valore è compreso tra due numeri
  • 'NON TRA' Interroga le chiavi meta in cui il valore non è compreso tra due numeri
  • 'EXISTS' Interroga le chiavi meta in cui il valore esiste
  • 'NON ESISTE' Interroga le chiavi meta in cui il valore non esiste affatto
  • 'REGEXP' Interroga le chiavi meta basate su un'espressione regolare
  • 'NON REGEXP' Opposto al precedente REGEXP

Come ordinare i messaggi per meta campi

Ovviamente WordPress ti consente di ordinare i post utilizzando i tuoi campi personalizzati utilizzando l'opzione "ordina per" in WP_Query. Dovrai impostare 'orderby' come 'meta_value' e quindi impostare un valore 'meta_key' sul nome del tuo campo. Per impostazione predefinita, questo è molto utile quando vuoi che la tua query restituisca in ordine alfabetico o ordinata per numero quando il tuo campo è un numero.

<?php
$ meta_query_args = array (
'post_type' => 'page' ,
'order' => 'ASC' ,
'meta_key' => 'city_name' ,
'orderby' => 'meta_value'
);
$ meta_query = new WP_Query ( $ meta_query_args );
view raw wordpress-orderby-meta-query.php hosted with by GitHub