Kako doći do podataka iz WordPress baze? Pravite temu ili dodatak (plugin) i pokušavate da dođete do određenog sadržaja članka ili stranice. WordPress čuva sve podatke članaka, stranica, komentara, custom polja, kategorija , korisnika, URL linkova u svojoj bazi podataka ali kako i gde se ti podaci kriju možete saznati ako pročitate ovaj članak. Nad bazom možete raditi svoje pretrage pisanjem SQL upita (queries) ili koristeći već postojeće WordPress funkcije što je naš savet kako ne bi ugroziili funkcionalnost same platforme. Ovde ćemo izdvojiti najčešće korišćene funkcije upita, pa ovaj članak možete koristiti kao svojevrsni vodič u radu sa WP_Query klasom.

WordPress Funkcije i klase

WordPress funkcije obezbeđuju okruženje za kreiranje i izmene WordPress tema i funckionalnosti za plagine. Postoje brojne funkcije koje možete koristiti od jednostavnih do složenih. Niko od vas ne zahteva da te funckije učite na pamet, već da naučite kako da ih ispravno koristite kako bi mogli u praksi da ih primenite kada vam zatrebaju, a do tih funkcija možete doći u bilo kojem trenutku preko članaka poput ovoga koji sada čitate ili na zvaničnoj stranici Codex reference codex.wordpress.org.

Dakle ideja je da vam predstavimo funkcije koje se često koriste i koje trebaju da budu lična karta svakog WordPress developera, za ostale složenije upite uvek postoji literatura na internetu pogotovo za ovaj CMS koji je defiinitivno izbor broj 1 kada su CMS platforme u pitanju.

1. WordPress WP_Query Class

Klasa WP_Query je u WordPress-u zadužena za rad sa upitima nad bazom podataka. Kada vam zatreba neki članak ili stranica, arhiva, feed, ili pretraga koristite ovaj objekat klase i to je ispravan način za tu namenu. Kako se pravilno koristi objekat klase WP_Query i kako se parametrizuje pokazaćemo u nastavku ovog članka.

WordPress new WP_Query funkcija

Novi objekat klase WP_Query class radite pozivom new WP_Query funkcije. Kada kreirate novi objekat, parametre upita prosleđujete listom argumenata.

Ovi argumenti definišu šta objekat vraća iz baze, i ta lista je prilično duga pa vas podsećamo da se uvek vratite na codex stranicu ako mislite da ste nešto zaboravili da dodate kao argument.

Jedan primer kako da pokupite sve članke koji recimo imaju tag "beograd" i kategoriju "poslednji" može da izgleda ovako:

//definicija liste argumenata
$args = array( ‘tag’ => ‘beograd’, ‘category => ‘latest’);
//kreiranje objekta WP_Query
$query = new WP_Query($args);

Da bi kod bio što čitljiviji za vaše saradnike ili za one koji će možda iza vas menjati kod, predlažemo da parametre upita sačuvate u nizu recimo pod nazivom $args, a da ih zatim prosledite kod kreiranje nove klase. Novu klasu dodelite promenljivoj $query, i ovde korisan savet za developere da koriste engleske nazive za promenljive da bi ostali developeri uključeni u projekte lakše pratili kod.

Koje sve parametre možemo proslediti klasi WP_query opet ponavljamo da uvek možete da proverite na codex stranici, a sada ćemo vam navesti par najvažnijih zajedno sa primerima.

WP_Query prema id članka

Navedite ID članka kao parametar ‘p’ u listi argumenata WP_Query klase da dobijete članak sa tim ID brojem (ako se ne navede explicitno, WP_Query vraća uvek vraća post tip odnosno članak) $query = new WP_Query( array( 'p' => 7 ) ); Prikaži stranicu sa sledećim ID stranice: Navedite ID stranice kao parametar ‘page_id’ u WP_Query argument listi. $query = new WP_Query( array( 'page_id' => 7 ) );

Sortiranje članaka sa funkcijom WP_Query orderby

Kada treba da sortirate podatke koje vraća upit u bazu dodajte parametar ‘orderby’. Sa ovim parametrom možete da sortirate rezultate recimo po naslovima ili autorima. Pri tome možete koristiti više od jednog parametra sortiranja polja i takođe i smer sortiranja rastući odnosno opadajući dodavanjem parametra ‘order’. Ukoliko sortirate samo jednu kolonu (polje), parametar ‘orderby’ gde se definiše kolona se navodi sa ‘order’ vrednošću "ASC" za rastući niz i "DESC" za opadajući niz. Ukoliko se ne navede predefinisan način sortiranja je opadajući a polje koje se sortira je datum (post_date). Ukoliko sortirate rezultat po više polja, argument ‘orderby’ navodite kao niz.

Primer sortiranja polja naslova u opadajućem redosledu:
//uredi ispis članaka po naslovima koji su sortirani u opadajućem redosledu
$args = array(
'orderby' => 'title',
'order' => 'DESC',
);
$query = new WP_Query( $args );


Primer ispisa sortiranja više polja u rastućem redosledu sa fallback opcijom:
//Ispis rezultata sortiranih po poljima 'title' i 'menu_order’.
$args = array(
'orderby' => 'title menu_order',
'order' => 'ASC',
);
$query = new WP_Query( $args );

Kolona title ima veći priorite pa se navodi ispred kolone 'menu_order'.

Primer sortiranja po više kolona, parametar se navodi kao niz:
$args = array(
'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC'
)
);
$query = new WP_Query( $args );

WP_Query Search parametar

Kada pretražujete bazu koristite parametar “s” i njegova vrednost je ključna reč pretrage. Evo primera kako da prikažete traženi post ako se ključna reč nalazi u varijabli “search_item”: $query = new WP_Query( array( 's' => ‘search_item’) ); Na ovaj način se kreira objekat klase WP_Query koji pretražuje članke i naslove prema ključnoj reči koju ste proslidili parametrom 's' i vrednošću u varijabli 'search_item'.

WP_Query posts_per_page parametar

Parametar posts_per_page definiše broj postova (članaka) po strani ispisa. Ukoliko želite ispis svih članaka ovaj parametar treba da ima vrednost -1. U ovom primeru prikazujemo 5 članaka na strani $query = new WP_Query( array( 'posts_per_page' => 5 ) ); Primer za prikaz svih članaka $query = new WP_Query( array( 'posts_per_page' => -1 ) );

Kako da koristite WP_Query

WP_Query objekat se kreira prilikom učitavanja stranice. U zavisnosti od URL stranice koja se otvara izvršava se odgovorajući upit nad bazom i kao podaci vraćaju članci, stranice, kategorije i drugo.

Dva su scenarija u kojima možete da koristite WP_Query objekat:
1. Odredi tip zahteva: Koristite WP_Query objekat da istražite tip trenutnog upita nad bazom. Informacija se nalazi u propertiju objekta $is_* . Ovaj pristup provere trenutnog upita često koriste developeri kada razvijaju teme i dodatke kada žele da izmene sam upit.

Napominjemo da ove propertije ne proveravate direktno u kodu, pa vas ovom prilikom upoznajemo sa još jednom važnom funkcijom koja postiji u WordPress-u koja se zove Conditional Tags. Da bi olakšali programerima kreiranje tema, templejta i plagina "uslove" u kojima se WordPress petlja trenutno izvršava proveravamo putem IF petlji nad "Conditional Tags" oznakama. Conditional Tags možete da koristite da izmenite ispis sadržaja na nekoj konkretnoj  stranici.
Primeri za  conditional tags:
WordPress is_home()
Funkcija is_home() vraća true ako se WP petlja izvršava na stranici bloga. Ako želite da promenite ispis na ovoj stranici onda koristite is_home() conditional tag da utvrdite da se petlja izvršava na stranici bloga i krenite u izmene prikaza.

WordPress is_page()
Funkcija is_page() vraća true ako se query izvršava na stranici (page). Proverite na codex stranici koje sve opcije postoje za proveru ispisa na stranicama.
2. Dok se nalazite u WordPress petlji možete koristiti conditioanal tags da menjate ispis za svaki post i za to koristite 2 najvažnije funkcije WordPress have_posts() i the_post().

2. WordPress have_posts funkcija

Funkcija have_posts() se koristi za proveru da li WordPress upit ima rezultata. Funkcija vraća TRUE kada u bazi ima rezultata i FALSE kada ih nema. 


$the_query->have_posts()

3. WordPress the_post funkcija

The Loop petlja je osnovno gradivo svakog WordPress developera. Njome se koristimo da prođemo kroz sve rezultate query upita nad bazom i da u okviru petlje prikažemo podatke onako kako želimo. U petlji možemo da koristimo bilo koji PHP ili HTML kod kao i templete tags funkcije koje postoje u samom jezgru WordPress-a.

Ako ne pravimo kastomizovan upit, predefinisani query će vratiti sve članke iz baze. Pre početka petlje proverićemo da li je upit vratio rezultate sa if have_posts() funkcijom, a onda ćemo u while have_posts() petlji proći kroz sve rezultate i prikazati ih na stranici.

Funkcija the_post() koristi index rezultata da inkrementira petlju dok postoje rezultati. Evo kako izgleda jednostavna loop petlja u WordPress-u.

U slučaju da menjate predefinisan upit izmenjena petlja može da izgleda upravo ovako:

Naučili ste osnove WP_Query kako da konstruišete query objekat. Sada ćemo da vam pokažemo malo naprednije upite da osetite šta sve možete da napravite u WordPress-u.