Standardna WordPress petlje

WordPress petlji prethodi neki upit ka bazi. “Standardni upit” je upit koji prikuplja podatke o standardnim postovima, iz čega se zaključuje da je “standardna petlja” petlja ona koja “vrti” niz rezultata standardnog upita. Rezultati standardnog upita iz MySQL baze se čuvaju u vidu $wp_query objekta:

Struktura WordPress petlje

U srcu WordPress petlje je while petlja:

While petlja u WordPress-u izgleda ovako:

WordPress petlja se sastoji iz tri dela:

  1. $wp_query->have_posts()

    $wp_query->have_posts() ukazuje na metodu $wp_query objekta i kada je standardni upit ka bazi onda se u petlji koristi skraćenica have_posts(). Ova funkcija proverava da li trenutni WP upit ka bazi ima neki razultat tj da li $wp_query objekat ima vrednost. To je boolean funkcija pa dokle god je TRUE, petlja se vrti.

  2. $wp_query->the_post()

    $wp_query->the_post() je takodje metoda $wp_query objekta i ovde se koristi skrćenica the_post() za standardni upit. Ova metoda dohvata sledeći post, i pravi dostupnim unutar petlje globalnu promenjivu $post i sve što ta globalna promenjiva daje.

    Ovaj deo petlje ništa ne štampa već samo govori sledećem delu petlje (a to je neki template tag) u kom trenutnom krugu se nalazi petlja, i u kome se šablonu nalazi u petlji:

    • $post>ID – ID of the current post.
    • $post–>post_category – Retrieves the ID of the post category.
    • $post–>post_parent – ID of the page parent. Useful for creating custom navigational elements.
    • $post–>post_title – Post Title
    • $post–>post_excerpt – Post excerpt
    • $post>post_content – Retrieves all of the post content, along with any markup.
    • $post–>post_name – Retrieving the slug of a post.
    • $post–>guid – Post Url
    • $post–>post_author – ID of post author post_parent
    • $post–>post_type – Returns the type, page or post.
    • $post–>menu_order – Returns the menu order as set in the post/page editing window. Often menu items are sorted via this value.
    • $post–>post_date – Retrieves the integer timestamp for when the post was published. The output can be customized.
    • $post–>post_modified – Retrieves the integer timestamp for when the post was last modified.
    • $post–>post_status – Retrieves one of five possible posts statuses: publish, private, draft, pending, future.
    • $post–>comment_count – Returns the number of comments, pings, and trackbacks for a given post.
  3. Template tag

    U središnjem delu petlje se koriste Template Tags jer oni uzimaju podatke iz baze. Ti podaci mogu biti bilo šta vezano za post, naslov posta, sadržaj posta… Kroz neke template tag-ove mogu da se proslede i parametri, što omogućava da sa istim tagom i različitim parametrima mogu da se prikupe različiti podaci iz baze. Postoje veliki broj template tag-ova koji mogu da se koriste kao npr:

    • the_content() – ispisuje kompletan sadržaj (dostupan samo u petlji)
    • the_excerpt() -ispisuje skraćenu verziju sadržaja (dostupan samo u petlji)
    • next_post() (dostupan samo u petlji)
    • previous_post() (dostupan samo u petlji)
    • the_title() – ispisuje naslov posta/strane
    • the_ID() – ispisuje ID posta/strane
    • the_permalink() – ispisuje link do posta/strane
    • the_author() – ispisuje ime autora koji je objavio post/stranu
    • the_category() – ispisuje kategoriju posta pod kojom je zaveden (ili više njih)
    • . . .

Standardnu WordPress petlju čini IF petlja koja pokreće while petlju samo ako ima postova. Primer standardne WordPress petlje:

Ali je uobičajeno da se u WordPress-u petlja prikazuje ovako:

ili još “lepše” ovako:

Veza izmedju petlje i šablona stranice

Potrebno je napomenuti da petlje koje potpuno isto izgledaju mogu prikazivati više postova na stranici ili samo jedam post. Ovo je omogućeno time što wordpress petlja nakon što “prepozna” u kome se šablonu nalazi, tačno “zna” šta treba da prikazuje, listu postova ili samo jedan post. Stoga će da prikaže različite rezultate ukoliko se nalazi u index.php ili single.php.

Primer

Sledeća wordpress petlja koja je napisana u okviru index.php šablona će štampati sve napisane postove:

Dok će ista petlja ali koja se nalazi u single.php šablonu štampati samo jedan post:

Praktično, jednake petlje ali prikazuju različite podatke jer se nalaze u različitim šablonima.

Custom WordPress petlja

Custom wordpress petlja se koristi uz objekat koji sadrži specifičan upit ka bazi a nastaje od klase WP_Query(). Custom petlja je slična standardnoj petlji stim što se ne koristi standardni objekat $wp_query nego neki custom objekat $spec_upit. Iz tog razloga za metode se ne koriste skraćenice kao u standardnoj petlji nego puna nomenklatura:

  • $spec_upit->have_post
  • $spec_upit->the_post()

U ovoj petlji metoda objekta $spec_upit->the_post() pravi dostupnim globalnu $post promenjivu isto kao i u standardnoj petlji, stim što ova globalna promenjiva sada sadrži podatke o custom upitu ka bazi i te podatke čuva u objektu $spec_upit. To znači da će u petlji preko globalne promenjive $post biti dostupni drugačiji podaci nego u standardnoj petlji.

Zbog toga je neophodno da po završetku petlje vratimo standardnu globalnu promenjivu. Da bi povratili standardnu $post promenljivu potrebno je da se pozove funkcija wp_reset_postdata() na mestu koda gde prestaje petlja tj. odmah iza endwhile.

Primer:

Resetovanje WordPress petlje

Već je pomenuto da je pri svakom korišćenju custom petlje neophodno resetovati petlju tj. da po završetku petlje vratimo standardnu globalnu promenjivu. To je takodje neophodno u slučaju kada u jednom šablonu imamo više uzastopnih petlji. Postoji više načina da resetujemo petlju a koji ćemo primeniti zavisi od slučaja do slučaja.

wp_reset_postdata()

Ova funkcija se primenjuje kad god se koristi custom upit ali takodje i kod višestrukih upita. Funkcija vraća globalnu promenjivu $post na trenutni post u glavnom upitu.

rewind_posts()

Ova funkcija se koristi ukoliko želimo da koristimo istu petlju na dva mesta u istom šablonu stranice. Ona kao što joj i sam naziv kaže premotava petlju na početni post. Dok prethodne funkcije resetuju ceo $wp_query objekat ova to ne radi nego koristi isti upit stim što “premota” na početak.

Podelite:

Ostavite komentar