Dacă proiectați sau dezvoltați teme sau pluginuri WordPress, există șanse mari ca într-o zi să aveți nevoie să faceți o interogare pentru meta câmpuri personalizate. Acestea sunt acele perechi cheie / valoare complet personalizate pe care le puteți atașa la orice postare, pagină sau tip de postare personalizată. WordPress are o interfață de utilizare de bază pentru ei în mod implicit sau puteți utiliza ceva de genul Advanced Custom Fields pentru a vă distra. Dar sub capotă ACF folosește câmpuri personalizate obișnuite.
Această pagină de fragment pe care o priviți acum a fost scrisă în 1999. În acel moment, pentru a căuta postări cu câmpuri particularizate, va trebui să utilizați variabila globală `$ wpdb`. Aceasta poate fi utilizată pentru crearea interogărilor MySQL pe care clasa WordPress WP_Query () nu le acceptă. Din fericire, astăzi, WordPress are argumente care acceptă interogări pentru meta câmpuri personalizate.
Aici, vom acoperi diferitele moduri în care puteți solicita și repeta postările cu anumite câmpuri personalizate (și valorile lor). Veți putea folosi aceste informații indiferent dacă utilizați WP_Query
clasa query_posts()
, sau get_posts()
. Deoarece query_posts()
și get_posts()
sunt ambalaje pentru WP_Query
clasă. Toți acceptă aceleași argumente.
Argumentele interogării
Iată un exemplu de bază al unei interogări WordPress preluate din WordPress Codex.
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();
Acesta $args
este elementul important acolo. Vom transmite diferite argumente pentru ca acest lucru să funcționeze așa cum ne dorim.
Când interogați meta personalizate, există două „grupuri” de argumente pe care le puteți folosi. Un grup este destinat unei interogări simple de câmp personalizat, iar celălalt grup de interogări mai complexe de câmpuri personalizate. Să începem cu grupul simplu.
meta_key
meta_key
Argumentul va interoga orice postare care are ID - ul de meta câmp personalizat salvat în baza de date, indiferent dacă există sau nu o valoare salvată pentru câmpul. Este meta_key
ID-ul pe care îl dați meta câmpurilor dvs. Ca aceasta:
Acest exemplu va interoga orice postare care are meta câmp personalizat cu ID-ul „câmp1”.
$args = array( 'meta_key' => 'field1' );
meta_value
meta_value
Argumentul interogări postare care au valoarea pe care o definiți. meta_value
Argumentul este utilizat pentru valori string. Acest exemplu va interoga orice postări cu un meta câmp personalizat care are valoarea „date1”.
$args = array( 'meta_value' => 'data1' );
Puteți combina și cele două. Acest exemplu va interoga numai postările care au meta câmpul personalizat cu ID-ul „câmp1” care are valoarea „date1”.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argumentul meta_value_num este similar cu argumentul `meta_value`. În cazul în care meta_value
argumentul este menționat pentru valorile șirului, acesta meta_value_num
este destinat pentru valorile numerice.
Acest exemplu arată cum să interogați câmpul meta personalizat „câmp1” dacă are o valoare „10”.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
meta_compare
Argumentul face exact ceea ce pare. Vă va permite să utilizați comparatoare cu argumentele `meta_value` și„ meta_value_num`. Comparatoarele pe care le puteți utiliza sunt '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , „BETWEEN”, „NOT BETWEEN”, „NOT EXISTS”, „REGEXP”, „NOT REGEXP” sau „RLIKE”. Iată un exemplu care arată cum să interogați orice postări care nu au valoarea „date1”.
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Interogări mai complexe
meta_interogare
Principalul argument pe care îl veți folosi pentru interogări complexe este meta_query
. Acest argument pe cont propriu nu face nimic. Îi spune doar WordPress că doriți să faceți o interogare pentru câmpurile meta personalizate. Veți adăuga argumente suplimentare meta_query
care vor fi utilizate pentru a defini interogarea.
cheie, valoare și comparare
Argumentele key
, value
lucru exact în același mod ca și meta-key
, meta-value
așa cum este descris mai sus. Complexul compare
este similar cu cel simplu de compare
mai sus, dar are o listă diferită de comparatoare. Complexul compare
folosește '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NU ÎNTRE ',' EXISTĂ 'sau' NU EXISTĂ '. value
poate fi o matrice, dar numai atunci când comparația folosește „IN”, „NOT IN”, „BETWEEN” sau „NOT BETWEEN”.
Dacă utilizați „EXISTĂ” sau „NU EXISTĂ” cu compare
, nu este necesar să specificați un value
argument.
Iată un exemplu care va interoga postările dacă are „câmpul1” cu valoarea „date1” și „câmpul2” cu valoarea care nu este „date2”.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
relație
Este relation
utilizat atunci când doriți să interogați meta date personalizate utilizând o relație logică. Puteți utiliza AND
sau OR
. De exemplu, veți utiliza AND
pentru a compara dacă data1 și data2 îndeplinesc criteriile și utilizați OR
dacă data1 sau data2 îndeplinesc criteriile.
Acest argument este independent. Adică nu apare în parametrii individuali ai unui câmp meta personalizat. Să vedem un exemplu. Acest exemplu va interoga numai postările care au „câmpul1” cu valoarea „date1” și „câmpul2” cu valoarea „date2”.
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Dacă ați trecut relation
la „SAU”. Apoi, ar interoga orice postări dacă „câmpul1” are valoarea „date1” sau dacă „câmpul2” are valoarea „date2”.
tip
type
Argumentul vă permite să alegeți tipul de date pentru interogare. Puteți utiliza „NUMERIC”, „BINAR”, „CHAR”, „DATE”, „DATETIME”, „DECIMAL”, „SIGNED”, „TIME” sau „UNSIGNED”.
Tipul „DATE” poate fi utilizat cu compare
„BETWEEN” numai dacă formatul datei este „AAAAMZZ”.
Acest exemplu va interoga orice postare în care valoarea „câmpului1” este numerică.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Exemplu de lume reală
Până acum, am dat doar exemple cu date și câmpuri arbitrare. Acum, aș dori să vă arăt un exemplu real de interogare a câmpurilor meta personalizate.
Scenariul
Ați creat un tip de postare personalizată pentru evenimente. Tipul de postare a evenimentelor are un câmp personalizat de dată cu ID-ul de event_date
. Doriți să creați o interogare care să afișeze orice evenimente care vor începe la data curentă în următoarele 30 de zile.
Vom folosi meta_query
argumentul așa cum dorim să îl folosim type
pentru a defini câmpul „eveniment_dată” ca tip de date „DATĂ”.
Aceasta este interogarea:
$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 );
Este value
o matrice a datei curente - 1 zi și 31 de zile de la data curentă. Deoarece folosim comparatorul „ÎNTRE”, vor fi interogate numai postările dintre matricea de valori, așa că dorim să le compensăm cu o zi.
Cu această interogare, veți afișa orice eveniment care apare în următoarele 30 de zile.
Concluzie
WP_Query
Clasa este o clasă foarte flexibil , care vă va permite să creați o multitudine de interogări personalizate. Dacă doriți să aflați mai multe despre diferitele argumente pe care le puteți utiliza pentru interogări, vă recomand să căutați în WP_Query
pagina Codex.