Ciclo personalizzato / query in base a campi personalizzati - Trucchi CSS

Anonim
Ultimo aggiornamento di Jason Witt.

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_Queryclasse query_posts(), o get_posts(). Poiché query_posts()e get_posts()sono wrapper per la WP_Queryclasse. 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_keyargomento 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_valueargomento interroga i post che hanno il valore definito. L' meta_valueargomento 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_valueargomento è 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_compareargomento 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_queryche verranno utilizzati per definire la query.

chiave, valore e confronta

L'argomenti key, valueopera esattamente allo stesso modo meta-key, meta-valuecome descritto sopra. Il complesso compareè simile al semplice comparesopra, ma richiede un diverso elenco di comparatori. Il complesso compareutilizza '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN "," NOT BETWEEN "," EXISTS "o" NOT EXISTS ". valuepuò 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 valueargomento.

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 relationsi usa quando si vuole metadati query personalizzata utilizzando una relazione logica. Puoi usare ANDo OR. Ad esempio, utilizzerai ANDper confrontare se dati1 e dati2 soddisfano i criteri e utilizzerai ORse 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 relationin "OR". Quindi interrogherà qualsiasi post se "campo1" ha il valore di "dati1" o se "campo2" ha il valore di "dati2".

genere

L' typeargomento 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_queryargomento poiché vogliamo utilizzare l' typeargomento 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_Queryclasse è 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_Querypagina del codice.