Ako dizajnirate ili razvijate WordPress teme ili dodatke, postoji velika vjerojatnost da ćete jednog dana trebati postaviti upit za prilagođena meta polja. To su oni potpuno prilagođeni parovi ključ / vrijednost koje možete priložiti bilo kojem postu, stranici ili prilagođenoj vrsti posta. WordPress prema zadanim postavkama za njih ima osnovno korisničko sučelje ili možete koristiti nešto poput naprednih prilagođenih polja da biste ih obožavali. Ali ispod haube ACF koristi uobičajena sva prilagođena polja.
Ova vrlo isječka stranica koju trenutno gledate napisana je 1999. U to vrijeme, da biste mogli postavljati upite za postove s određenim prilagođenim poljima, trebali biste upotrijebiti globalnu varijablu `$ wpdb`. To se može koristiti za stvaranje MySQL upita koje klasa WordPress WP_Query () ne podržava. Srećom danas, WordPress ima argumente koji podržavaju upite za prilagođena meta polja.
Ovdje ćemo pokriti različite načine na koje možete zatražiti i prebaciti postove s određenim prilagođenim poljima (i njihovim vrijednostima). Te ćete podatke moći koristiti bilo da koristite WP_Query
klasu query_posts()
, ili get_posts()
. Budući da su query_posts()
i get_posts()
omoti za WP_Query
razred. Svi oni prihvaćaju iste argumente.
Argumenti upita
Evo osnovnog primjera WordPress upita preuzetog iz WordPress Codexa.
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();
Tamo $args
je najvažnije. Iznijet ćemo različite argumente kako bismo ovo učinili kako želimo.
Prilikom upita za prilagođenu meta postoje dvije "grupe" argumenata koje možete koristiti. Jedna grupa je za jednostavni upit prilagođenih meta polja, a druga grupa za složenije upite prilagođenih meta polja. Počnimo s jednostavnom skupinom.
meta_ključ
meta_key
Argument će upit bilo koji post koji ima običaj polje meta ID spremljene u bazu podataka, da li ili ne postoji spremaju za područje vrijednosti. To meta_key
je ID koji dajete svojim meta poljima. Kao ovo:
![](1114419/custom_loopquery_based_on_custom_fields_css-tricks_2.png.webp)
![](1114419/custom_loopquery_based_on_custom_fields_css-tricks_2.png.webp)
Ovaj će primjer tražiti bilo koji post koji ima prilagođeno meta polje s ID-om "polje1".
$args = array( 'meta_key' => 'field1' );
meta_vrijednost
meta_value
Argument upiti post koji imaju vrijednost koju definirate. meta_value
Argument se koristi za string vrijednosti. Ovaj će primjer tražiti sve postove s prilagođenim metapoljem koje ima vrijednost "data1".
$args = array( 'meta_value' => 'data1' );
To dvoje možete i kombinirati. Ovaj će primjer tražiti samo postove koji imaju prilagođeno meta polje s ID-om "polje1" koje ima vrijednost "podaci1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argument meta_value_num sličan je argumentu `meta_value`. Tamo gdje je meta_value
argument ment za string vrijednosti, on meta_value_num
je namijenjen numeričkim vrijednostima.
Ovaj primjer pokazuje kako izvršiti upit za prilagođeno meta polje "field1" ako ima vrijednost "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_uporediti
meta_compare
Argument čini točno ono što zvuči kao. Omogućit će vam upotrebu usporednika s argumentima `meta_value` i` meta_value_num`. Usporednici koje možete koristiti su '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , "IZMEĐU", "NE IZMEĐU", "NE POSTOJI", "REGEXP", "NIJE REGEXP" ili "RLIKE". Evo primjera koji pokazuje kako postaviti upit za sve postove koji nemaju vrijednost "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Složeniji upiti
meta_upit
Glavni argument koji ćete koristiti za složene upite je meta_query
. Ovaj vlastiti argument ništa ne čini. WordPressu samo govori da želite uputiti upit za prilagođena meta polja. U nju ćete dodati dodatne argumente meta_query
koji će se koristiti za definiranje upita.
ključ, vrijednost i usporedba
Argumenti key
, value
rad na isti način kao što je meta-key
, meta-value
kao što je opisano gore. Kompleks compare
je sličan compare
gore navedenom jednostavnom , ali uzima drugačiji popis usporednika. Kompleks compare
koristi '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IZMEĐU ',' NE IZMEĐU ',' POSTOJI 'ili' NE POSTOJI '. value
može biti niz, ali samo kada usporedba koristi "IN", "NOT IN", "BETWEEN" ili "NOT BETWEEN".
Ako koristite "POSTOJI" ili "NE POSTOJI" sa compare
, ne morate navesti value
argument.
Evo primjera koji će postavljati upite za postove ako ima "polje1" s vrijednošću "podaci1" i "polje2" s vrijednošću koja nije "podatak2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
odnos
Koristi relation
se kada želite upitati prilagođene meta podatke koristeći logički odnos. Možete koristiti AND
ili OR
. Na primjer, upotrijebit ćete AND
da li podaci1 i podaci2 ispunjavaju kriterije, a koristite OR
ako podaci1 ili podaci2 ispunjavaju kriterije.
Ovaj je argument samostalan. Znači da se ne pojavljuje u pojedinačnim prilagođenim parametrima meta polja. Pogledajmo primjer. Ovaj će primjer tražiti samo postove koji imaju "polje1" s vrijednošću "podaci1" i "polje2" s vrijednošću "podaci2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Ako ste promijenili relation
u "ILI". Tada bi se pitalo za sve postove ako "polje1" ima vrijednost "podaci1" ili ako "polje2" ima vrijednost "podaci2".
tip
type
Argument omogućuje vam da odaberete vrstu podataka na upit. Možete upotrijebiti 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'POTPISANO', 'TIME' ili 'UNSIGNED'.
Tip „DATUM“ može se koristiti s compare
„IZMEĐU“ samo ako je format datuma „GGGGMMDD“.
Ovaj će primjer tražiti bilo koji post u kojem je vrijednost "polje1" brojčana.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Primjer iz stvarnog svijeta
Do sada sam davao samo primjere s proizvoljnim podacima i poljima. Sada bih vam želio pokazati stvarni primjer ispitivanja prilagođenih meta polja.
Scenarij
Izradili ste prilagođenu vrstu objave događaja. Vrsta objave događaja ima prilagođeno polje za datum s ID-om event_date
. Želite stvoriti upit koji će prikazivati sve događaje koji će započeti na trenutni datum kroz sljedećih 30 dana.
Koristit ćemo meta_query
argument jer želimo koristiti type
argument za definiranje polja "datum_datuma" kao tipa podataka "DATUM".
Ovo je upit:
$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 );
value
Je niz trenutni datum - 1 dan i 31 dana od trenutnog datuma. Budući da koristimo usporedbu "IZMEĐU", tražit će se samo postovi između polja vrijednosti, pa ih želimo nadoknaditi za jedan dan.
Ovim ćete upitom prikazati bilo koji događaj koji se dogodi u sljedećih 30 dana.
Zaključak
Predavanje WP_Query
je vrlo fleksibilna klasa koja će vam omogućiti stvaranje mnoštva prilagođenih upita. Ako želite saznati više o različitim argumentima koje možete koristiti za upite, preporučujem pregledavanje WP_Query
stranice kodeksa.