Prilagođena petlja / upit na temelju prilagođenih polja - CSS-trikovi

Anonim
Posljednje ažuriranje Jason Witt.

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_Queryklasu query_posts(), ili get_posts(). Budući da su query_posts()i get_posts()omoti za WP_Queryrazred. 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 $argsje 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_keyArgument ć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_keyje ID koji dajete svojim meta poljima. Kao ovo:

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_valueArgument upiti post koji imaju vrijednost koju definirate. meta_valueArgument 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_valueargument ment za string vrijednosti, on meta_value_numje 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_compareArgument č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_querykoji će se koristiti za definiranje upita.

ključ, vrijednost i usporedba

Argumenti key, valuerad na isti način kao što je meta-key, meta-valuekao što je opisano gore. Kompleks compareje sličan comparegore navedenom jednostavnom , ali uzima drugačiji popis usporednika. Kompleks comparekoristi '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'IZMEĐU ',' NE IZMEĐU ',' POSTOJI 'ili' NE POSTOJI '. valuemož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 valueargument.

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 relationse kada želite upitati prilagođene meta podatke koristeći logički odnos. Možete koristiti ANDili OR. Na primjer, upotrijebit ćete ANDda li podaci1 i podaci2 ispunjavaju kriterije, a koristite ORako 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 relationu "ILI". Tada bi se pitalo za sve postove ako "polje1" ima vrijednost "podaci1" ili ako "polje2" ima vrijednost "podaci2".

tip

typeArgument 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_queryargument jer želimo koristiti typeargument 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 );

valueJe 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_Queryje 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_Querystranice kodeksa.