Evo kako preuzeti WP_Query bilo koji post koji želite

Ako ste u prošlosti izrađivali jednostavne teme, vjerovatno je da potreba za vlastitim preuzimanjem postova nije nastala. Napokon, WordPress učita najnovijih 10 postova na glavnoj stranici i ispravne postove na arhivskim stranicama. Što je sa složenijim scenarijima? Što ako želite sitemap vrsta i želite nabrojiti sve svoje postove i stranice poredane po datumu?


WP_Query je vaš prijatelj, omogućava vam povlačenje postova iz baze podataka prema vašim kriterijima. Možete preuzeti sve postove iz jedne kategorije koji sadrže i određene oznake. Možete dohvatiti sve stranice stvorene prošle godine i postove koji nemaju istaknutu sliku.

U ovom postu ću vam detaljno pogledati kako funkcionira WP_Query – krenimo!

Prilagođena petlja

Ključ dobrog rada s prilagođenim upitima je ovladavanje argumentima koje im možete proslijediti. Prije nego što pogledamo ovo, stvarajmo brzo "kostur" možemo koristiti za nabrajanje postova. Petlja na redovnoj stranici s arhivima izgledala bi ovako:

<?php if (have_posts ()): ?>
<?php dok (have_posts ()): the_post () ?>

<?php u konačnici ?>
<?php ostalo: ?>

<?php endif ?>

To funkcionira u najboljem redu jer je WordPress prije učitavanja stranice već pronašao ispravne postove. Kada pišemo prilagođeni upit, trebat će nam prilagođena petlja. Kod je vrlo sličan, evo:

<?pHP
$ args = niz (
‘post_type’ => ‘Post’,
‘post_status’ => ‘budućnost’
);
$ zakazani = novi WP_Query ($ args);

ako ($ zakazano->have_posts ()):
?>
<?php dok (zakazano $->have_posts ()): zakazano $->pošta() ?>

<?php u konačnici ?>
<?php ostalo: ?>

<?php endif ?>

Stvaramo novi WordPress upit koristeći klasu WP_Query, prosljeđujući ga parametrima za određivanje vrsta postova koji su nam potrebni. Zatim pozivamo metode have_posts () i the_post () na naš $ zakazani objekt.

Ako ste novi za objektno orijentirano programiranje i zapravo ne razumijete zašto, ne brinite, i dalje lako možete koristiti prilagođene upite. Usredotočit ćemo se na niz $ args u cijelom postu, što će biti prilično jednostavno.

Jednostavni argumenti

Kao što sam spomenula, glavno "tijelo znanja" kada je u pitanju WP_Query leži u njenim argumentima. Kodeks Nabrajamo ih sve, ovdje ćemo pogledati najkorisnije.

Neki su argumenti prilično jednostavni, poput parametra tag ili tag_id. Prvi uzima slug oznake, a kasnije ID. Možete i odvojiti više stavki zarezima ili upotrebljavati negativne ID-ove da biste ukazali da želite dohvaćati postove ne priloži tu određenu oznaku.

$ args = niz (
‘post_type’ => ‘Post’,
‘tag_id’ => ’22, 92,44, -21′
);
$ our_posts = novi WP_Query ($ args);

Isječak bi pronašao članke na kojima je priložena bilo koja od prve tri oznake, ali ne i četvrta. Iako je ovaj sustav dovoljno moćan za jednostavne potrebe, obično koristim daleko fleksibilniji upit o taksonomiji o kojem ću malo više govoriti..

Autor, ime autora, mačka, ime kategorije, s (za pojmove za pretraživanje), post_status, post_tip primjeri su nekih jednostavnijih polja. Imajte na umu da neka polja, poput post_statusa, zahtijevaju da prođete niz statusa ako želite koristiti više vrijednosti.

$ args = niz (
‘post_type’ => niz (‘objava’, ‘stranica’),
‘post_status’ => niz (‘skica’, ‘objava’),
‘mačka’ => ‘glazbeni spotovi’
);
$ our_posts = novi WP_Query ($ args);

Gornji primjer dohvaća sve postove koji su ili stranice, postovi; objavljeni su ili u statusu skice i dodijeljena im je kategorija glazbe ili videozapisa. Ovo se može koristiti za prikazivanje naslova bilo kojeg trenutnog ili planiranog sadržaja vezanog uz glazbu ili videozapise.

Taksonomski upiti

Za jednostavne stvari dovoljno je korištenje spomenutih argumenata za dohvaćanje postova na temelju kategorija ili oznaka, ali što ako imate prilagođenu taksonomiju ili trebate kombinirati više parametara? Odgovor leži u argumentu tax_query koji je i sam niz. Pogledajmo prvo primjer.

$ args = niz (
‘post_type’ => ‘knjiga’,
‘tax_query’ => array (
array (
‘taksonomija’ => ‘žanr’,
‘polje’ => „Metak”,
‘uvjeti’ => niz (‘scifi’, ‘triler’),
‘operator’ => ‘NE U’,
),
array (
‘taksonomija’ => ‘Autor’,
‘polje’ => ‘iskaznica’,
‘uvjeti’ => niz (92, 883, 399),
),
‘odnos’ => ‘I’,
),
);
$ upit = novi WP_Query ($ args);

Ovdje dohvatimo neke postove iz naše vrste knjiga ‘knjiga’, dodajući neke parametre taksonomije. Upotrebom dva niza definiranih u tax_query-u odredili smo da želimo izvući knjige napisane u autorima 92, 883 ili 399 koje su ne u žanru sci-fi ili trilera. Parametar relacije definira odnos između dva niza. U našem slučaju to je odnos ‘i’ što znači da moraju biti ispunjena oba uvjeta.

Da smo upotrijebili ‘ili’, pronašli bismo knjige koje ili nisu u kategoriji sci-fi ili trilera ili su napisane od strane tri navedena autora. Na običnom engleskom to znači: Želim vidjeti sve svoje knjige, osim žanra sci-fi i trilera. Međutim, želim vidjeti sve knjige Terryja Pratchetta, Douglasa Adamasa i Stephena Kinga, bez obzira na žanr.

Meta upiti

Meta upiti vrlo su slični upitima taksonomije, ali oni koriste podatke iz meta tablice za filtriranje postova. Donji kôd prikazat će sve objavljene postove koji imaju istaknutu sliku.

$ args = niz (
‘post_type’ => ‘Post’,
‘meta_query’ => array (
array (
‘ključ’ => ‘_Thumbnail_id’,
‘vrijednost’ => „”,
‘usporedi’ => ‘! =’,
),
),
);
$ upit = novi WP_Query ($ args);

WordPress pohranjuje ID istaknute slike za post pomoću polja _thumbnail_id. Dakle, ako dohvatimo sve postove u kojima ta meta vrijednost nije prazna, trebali bismo završiti sa svim postovima koji imaju istaknutu sliku.

Tajna ovdje je znati kako upotrijebiti svojstvo i vrstu usporedbe. Možete koristiti mnoštvo vrijednosti koje bi trebale biti poznate iz SQL-a: ‘=’, ‘! =’, ‘>’,’>= ‘,'<‘,'<= ‘,’ LIKE ‘,’ NOT LIKE ‘,’ IN ‘,’ NOT IN ‘,’ MEDWEEN ‘,’ NOT MED BETWEEN ‘,’ EXISTS ‘(od WordPressa 3.5 i novije) i’ NOT EXITS ‘(od WordPress 3.5 i gore)

Svojstvo vrste obično je važno kada želite usporediti brojeve ili datume. Moguće vrijednosti su “NUMERIČNO”, “BINARI”, “CHAR”, “DATUM”, “DATETIME”, “DECIMAL”, “POTPISANO”, “VRIJEME”, “NAPISANO”. Imajte na umu da koristite NUMERIC pri uspoređivanju brojeva, u većini drugih slučajeva trebali biste biti u redu.

Baš kao i kod taksonomskih upita, možete slagati više zahtjeva, a zatim upotrijebiti parametar relacije da odredite odnos između njih.

$ args = niz (
‘post_type’ => ‘Post’,
‘meta_query’ => array (
‘odnos’ => ‘ILI’,
array (
‘ključ’ => ‘raspoloženje’,
‘vrijednost’ => niz (‘sretan’, ‘sjajan’),
‘usporedi’ => ‘U’,
),
array (
‘ključ’ => „Prihod”,
‘vrijednost’ => 500,
‘usporedi’ => ‘>’,
‘tip’ => ‘NUMERIC’
),
),
);
$ upit = novi WP_Query ($ args);

Gornji primjer prikazao bi postove iz hipotetskog dnevnika u kojima se dogodilo nešto dobro. Bilo sam sretna ili fantastična ili sam taj dan zaradila više od 500 USD.

Parametri datuma

Datumi mogu postati malo složeni, ali vrlo su fleksibilni. WP_Query dokumentacija ima puno primjera ako vam trebaju dodatne informacije.

Dohvaćanje postova iz određenog vremena prilično je jednostavno. Možete odrediti vrijeme, mjesec, broj, w (tjedan u godini), dan i nekoliko drugih parametara. Dolje navedeni kôd dohvatio bi sve postove od ožujka 2013.

$ args = niz (
‘post_type’ => ‘Post’,
‘godina’ => 2013,
‘mjesec’ => 3
);
$ upit = novi WP_Query ($ args);

Ako želite ući u složenije vremenske raspone, morat ćete koristiti date_query. To vam omogućuje lako određivanje proizvoljnih raspona, koristeći poznati format polja. Sljedeći primjer – ljubaznošću Codexa – pokazuje kako možete dohvatiti postove napisane između 9:00 i 17:00 radnim danom.

$ args = niz (
‘post_type’ => ‘Post’,
‘date_query’ => array (
array (
‘sat’ => 9,
‘usporedi’ => ‘>=”,
),
array (
‘sat’ => 17,
‘usporedi’ => ‘<=”,
),
array (
‘danofweek’ => niz (2, 6),
‘usporedi’ => ‘IZMEĐU’,
),
),
);
$ upit = novi WP_Query ($ args);

Rezultati naručivanja

Redoslijed predstavljanja jednako je važan kao i elementi unutar. Srećom, WordPress nam nudi parametre order_by i narudžbe. Parametar narudžbe je prilično jednostavan, a ASC ili DESC možete naručiti uzlazno ili silazno.

Parametar order_by može poprimiti niz vrijednosti: ‘none’, ‘ID’, ‘author’, ‘title’, ‘name’, ‘type’, ‘date’, ‘modificirano’, ‘parent’, ‘rand’ , ‘comment_count’, ‘menu_order’, ‘meta_value’, ‘meta_value_num’, ‘post__in’. Naručivanje putem meta-vrijednosti može biti osobito korisno. U tom slučaju ne zaboravite navesti i polje meta_key.

$ args = niz (
‘post_type’ => ‘slikarstvo’,
‘meta_query’ => array (
array (
‘ključ’ => ‘cijena’,
‘vrijednost’ => 50000,
‘usporedi’ => ‘>’,
‘tip’ => ‘NUMERIC’
),
),
‘order_by’ => ‘Meta_value_num’,
‘meta_key’ => ‘cijena’
);
$ upit = novi WP_Query ($ args);

Ovaj primjer uzima slike koje vrijede više od 50 000 USD i naređuje ih uzlazno po cijeni. Imajte na umu da, budući da je cijena pohranjena kao broj, za naručivanje rezultata upotrijebio sam meta_value_num, za razliku od meta_value koji će se koristiti za žice.

Još jedna narudžba vrijedna spomena je post__in. Ovaj post__in je parametar sam po sebi, omogućuje vam da odredite niz ID-ova postova za preuzimanje. WordPress prema zadanom naručuje postove po datumu, red koji ste odredili u postu__in nije sačuvan. Ako post__in koristite i kao redoslijed po vrijednosti, WordPress će sačuvati red.

$ args = niz (
‘post_type’ => ‘Post’,
‘post__in’ => niz (23, 441, 12, 322, 34, 33),
‘order_by’ => ‘Post__in’,
);
$ upit = novi WP_Query ($ args);

Završavati

Nadam se da je iz ovog uvoda u WP_Query jasno da je ovo zaista moćna klasa. Omogućuje vam dohvaćanje postova pomoću vlastitih kriterija na WP standard. Pogledajte to dokumentacija za više informacija i nekoliko sjajnih svojstava i metoda koja ova klasa nudi za manipuliranje upitom i petljom.

WP_Query je dio onoga što WordPress čini odličnim općim CMS-om – mogućnost dohvaćanja objekata iz baze podataka na modularan i prilagodljiv način.

Ako imate bilo kakvih pitanja, javite nam u komentarima!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map