Se progetti o sviluppi temi o plugin per WordPress, ci sono buone probabilità che un giorno dovrai eseguire una query per i meta campi personalizzati. Queste sono quelle coppie chiave / valore completamente personalizzate che puoi allegare a qualsiasi post, pagina o tipo di post personalizzato. WordPress ha un'interfaccia utente di base per loro di default, oppure puoi usare qualcosa come Advanced Custom Fields per divertirti con loro. Ma sotto il cofano ACF utilizza i normali campi personalizzati.
Questo frammento di pagina che stai guardando in questo momento è stato scritto nel 1999. A quel tempo, per interrogare post con particolari campi personalizzati, avresti bisogno di usare la variabile globale `$ wpdb`. Può essere utilizzato per creare query MySQL che la classe WP_Query () di WordPress non supporta. Fortunatamente oggi, WordPress ha argomenti che supportano le query per i metacampi personalizzati.
Qui, tratteremo i diversi modi in cui puoi richiedere e ripetere i post con particolari campi personalizzati (e i loro valori). Sarai in grado di utilizzare queste informazioni indipendentemente dal fatto che utilizzi la WP_Query
classe query_posts()
, o get_posts()
. Poiché query_posts()
e get_posts()
sono wrapper per la WP_Query
classe. Tutti accettano gli stessi argomenti.
Gli argomenti della query
Ecco un esempio di base di una query di WordPress presa dal Codex di WordPress.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();
Il $args
è il bit importante lì. Passeremo diversi argomenti per farlo funzionare come vogliamo.
Quando si esegue una query per meta personalizzata, ci sono due "gruppi" di argomenti che è possibile utilizzare. Un gruppo è per una semplice query di meta campo personalizzato e l'altro gruppo di per query di meta campi personalizzati più complesse. Cominciamo con il semplice gruppo.
meta_key
L' meta_key
argomento interrogherà qualsiasi post che ha il meta ID del campo personalizzato salvato nel database, indipendentemente dal fatto che sia o meno un valore salvato per il campo. Il meta_key
è l'ID che si dà ai vostri campi meta. Come questo:


Questo esempio interrogherà qualsiasi post che abbia il metacampo personalizzato con l'ID "field1".
$args = array( 'meta_key' => 'field1' );
meta_value
L' meta_value
argomento interroga i post che hanno il valore definito. L' meta_value
argomento viene utilizzato per i valori stringa. Questo esempio interrogherà tutti i post con un metacampo personalizzato che ha il valore "data1".
$args = array( 'meta_value' => 'data1' );
Puoi anche combinare i due. Questo esempio interrogherà solo i post che hanno il metacampo personalizzato con l'ID di "field1" che ha il valore di "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
L'argomento meta_value_num è simile all'argomento `meta_value`. Dove l' meta_value
argomento è ment per valori stringa, meta_value_num
è inteso per valori numerici.
Questo esempio mostra come interrogare il metacampo personalizzato "field1" se ha un valore di "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
L' meta_compare
argomento fa esattamente quello che sembra. Ti permetterà di usare i comparatori con gli argomenti `meta_value` e` meta_value_num`. I comparatori che puoi usare sono '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" o "RLIKE". Ecco un esempio che mostra come interrogare tutti i post che non hanno il valore di "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Query più complesse
meta_query
L'argomento principale che utilizzerai per le query complesse è meta_query
. Questo argomento da solo non fa nulla. Dice semplicemente a WordPress che desideri eseguire una query per i metacampi personalizzati. Aggiungerai ulteriori argomenti all'interno meta_query
che verranno utilizzati per definire la query.
chiave, valore e confronta
L'argomenti key
, value
opera esattamente allo stesso modo meta-key
, meta-value
come descritto sopra. Il complesso compare
è simile al semplice compare
sopra, ma richiede un diverso elenco di comparatori. Il complesso compare
utilizza '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN "," NOT BETWEEN "," EXISTS "o" NOT EXISTS ". value
può essere un array, ma solo quando il confronto utilizza "IN", "NOT IN", "BETWEEN" o "NOT BETWEEN".
Se usi "EXISTS" o "NOT EXISTS" con compare
, non è necessario specificare un value
argomento.
Di seguito è riportato un esempio che interrogherà i post se contiene "campo1" con il valore "dati1" e "campo2" con il valore diverso da "dati2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
relazione
La relation
si usa quando si vuole metadati query personalizzata utilizzando una relazione logica. Puoi usare AND
o OR
. Ad esempio, utilizzerai AND
per confrontare se dati1 e dati2 soddisfano i criteri e utilizzerai OR
se dati1 o dati2 soddisfano i criteri.
Questo argomento è autonomo. Significa che non appare nei parametri dei singoli metacampi personalizzati. Diamo un'occhiata a un esempio. Questo esempio interrogherà solo i post che hanno "field1" con il valore di "data1" e "field2" con il valore di "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Se sei cambiato relation
in "OR". Quindi interrogherà qualsiasi post se "campo1" ha il valore di "dati1" o se "campo2" ha il valore di "dati2".
genere
L' type
argomento consente di scegliere il tipo di dati da interrogare. Puoi utilizzare "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME" o "UNSIGNED".
Il tipo "DATA" può essere utilizzato con compare
"BETWEEN" solo se il formato della data è "AAAAMMGG".
Questo esempio interrogherà qualsiasi post in cui il valore di "field1" è numerico.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Esempio del mondo reale
Finora ho fornito solo esempi con dati e campi arbitrari. Ora, vorrei mostrarvi un esempio del mondo reale di query di meta campi personalizzati.
Lo scenario
Hai creato un tipo di post personalizzato per gli eventi. Il tipo di post degli eventi ha un campo personalizzato della data con l'ID event_date
. Si desidera creare una query che mostrerà tutti gli eventi che inizieranno dalla data corrente fino ai prossimi 30 giorni.
Utilizzeremo l' meta_query
argomento poiché vogliamo utilizzare l' type
argomento per definire il campo "event_date" come tipo di dati "DATE".
Questa è la domanda:
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );
Il value
è un array della data corrente - 1 giorno e 31 giorni dalla data corrente. Dato che stiamo usando il comparatore "BETWEEN", verranno interrogati solo i messaggi tra l'array di valori, quindi vogliamo compensarli di un giorno.
Con questa query visualizzerai tutti gli eventi che si verificano nei prossimi 30 giorni.
Conclusione
La WP_Query
classe è una classe molto flessibile che ti consentirà di creare una moltitudine di query personalizzate. Se vuoi saperne di più sui diversi argomenti che puoi usare per le query, ti consiglio di guardare attraverso la WP_Query
pagina del codice.