The Loop – tai WordPress ciklas, kuris išrenka straipsnių komponentus iš duomenų bazės ir aprašo šių elementų vaizdavimą puslapyje. Yra keturi šio ciklo variantai:
- Standartinis ciklas
- Ciklas su query_posts()
- Ciklas su WP_Query()
- Ciklas su get_posts()
Kiekvienas būdas yra šiek tiek unikalus, tačiau jie turi ir nemažai panašumų. Funkcionalumas ir užklausos (query) parametrai, dažniausiai tie patys. Naudojant šiuos keturis ciklus galima sukurti kelis ciklus tame pačiame puslapyje, kiekviename cikle vaizduoti tik tam tikros grupės straipsnius ir panašiai. Ciklo pavyzdžių galite rasti savo temos index.php ar loop.php failuose. Ciklai paprastai prasideda sakiniu if (have_posts()).
Standartinis ciklas
Standartinis ciklas atrodo štai taip:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div <?php post_class(); ?> id="post-<?php the_ID(); ?>"> <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1> <?php the_content(); ?> </div> <?php endwhile; ?> <div> <div><?php next_posts_link(); ?></div> <div><?php previous_posts_link(); ?></div> </div> <?php else : ?> <div <?php post_class(); ?> id="post-<?php the_ID(); ?>"> <h1>Not Found</h1> </div> <?php endif; ?>
Kodėl standartinis? Todėl, kad 99% WordPress temų tokį ciklą naudoja turinio vaizdavimui naršyklės lange. Šis ciklas “pasako” WordPress sistemai, ką ir kaip pateikti naršyklei, kuriuos duomenų bazės laukus nuskaityti. Galime nuskaityti iš duomenų bazės pačius įvairiausius straipsnių duomenis – the_title(), the_ID(), the_excerpt() ir panašiai.
Standartinis ciklas iš WordPress administravimo skydelio gauna duomenis kiek straipsnių vaizduoti kiekviename lape rodant bet kurį svetainės straipsnių lapą. Jei neapibrėžta kitaip, šis ciklas vykdomas formuojant kiekvieną lapą. Pvz. jei kas nors paspaudžia sekančio puslapio nuorodą, kai ekrane rodoma “wordpress” žyma sužymėti straipsniai – vykdomas šis ciklas.
Standartinis ciklas tinkamas tuomet, jei jums tinka standartinis, WordPress valdymo skydelyje nurodytas, straipsnių vaizdavimo būdas ir jų skaičius kiekviename lape.
Ciklas su query_posts()
Funkcija query_posts() leidžia atlikti nestandartines duomenų bazės užklausas ir rezultatus vaizduoti mums norimu būdu. Šios funkcijos pagalba galime pakeisti standartinio ciklo nustatymus. Štai pavyzdžiui sekančiame pavyzdyje vykdome standartinį ciklą, tačiau nurodome, kad nebūtų vaizduojami straipsniai, priskirti temai (Category), kurios ID=9:
<?php global $query_string; // privaloma $posts = query_posts($query_string.'&cat=-9'); // nevaizduoti temos su ID 9 <?php /*Standartinis ciklas*/ ?> <?php wp_reset_query(); /*anuliuojami užklausos parametrai*/ ?>
Jei mums netinka visi standartinio ciklo parametrai, tuomet antroje eilutėje rašome kažką panašaus į
$posts = query_posts('posts_per_page=3&cat=-6,-9&order=ASC');
Tuomet bus vaizduojami visi straipsniai išskyrus kategorijas, kurių ID yra 6 ir 9, straipsnius rūšiuojant nuo seniausio iki naujausio, kiekviename lape rodant po tris. Atkreipkite dėmesį, kad šiuo atveju antrąkart nenaudojame $query_string. Daugiau užklausos nuostatų galite surasti WordPress Codex puslapyje. query_posts() funkcija dažniausiai naudojama, kai reikia pavaizduoti konkrečios pasirinktos temos ar žymių (tags) straipsnius vieną kartą. Jei reikia daugiau nei vieno ciklo, galima kurti kelis query_posts() tipo ciklus. Tačiau tokiu atveju žymiai patogiau naudoti WP_Query().
Ciklas su WP_Query()
WP_Query() funkcija leidžia kontroliuoti visus standartinio ciklo parametrus ir jį galima vykdyti keletą kartų. Kai ši funkcija naudojama pakeisti standartinio ciklo parametrus, kodas panašus kaip ir query_posts() atveju:
<?php $custom_query = new WP_Query('cat=-9'); // nevaizduoti temos su ID 9
while($custom_query->have_posts()) : $custom_query->the_post(); ?>
<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<?php the_content(); ?> </div>
<?php endwhile; ?>
<?php wp_reset_postdata(); /*anuliuojami užklausos parametrai*/ ?>
Šioje funkcijoje galima naudoti tuos pačius parametrus kaip ir query_posts() atveju. Atkreipkite dėmesį, kad naudojant WP_Qery() nereikia $query_string() kintamojo. Naudodami WP_Query() mes galime sukurti ir modifikuoti keletą ciklų.
<?php // 1 ciklas
$first_query = new WP_Query('cat=-1'); // exclude category
while($first_query->have_posts()) : $first_query->the_post();
...
endwhile;
wp_reset_postdata();
// 2 ciklas
$second_query = new WP_Query('cat=-2'); // exclude category
while($second_query->have_posts()) : $second_query->the_post();
...
endwhile;
wp_reset_postdata();
// 3 ciklas
$third_query = new WP_Query('cat=-3'); // exclude category
while($third_query->have_posts()) : $third_query->the_post();
...
endwhile;
wp_reset_postdata();
?>
Šie ciklai temos šablone gali būti panaudoti bet kur, pavyzdžiui vienas ciklas gali būti šoninėje skiltyje (Sidebar), kitas pagrindinio turinio srityje, trečias apatiniame svetainės kolontitule (Footer). Ciklų vaizdavimo eiliškumas taip pat nesvarbus. Panaudodami WP_Query() kelis kartus, galime sukurti keletą ciklų komplektų (multiple loops) ir juos pavaizduoti puslapyje. Žinoma, ši funkcija labai galinga ir jei kartais mums tereikia atskirai pavaizduoti keletą pasirinktų įrašų, kad nebūtume panašūs į šaudančius į žvirblius su patranka, galima naudoti funkciją get_posts().
Ciklas su get_posts()
Funkcija get_posts() tinkama, kai norime pavaizduoti keletą statinių straipsnių blokų viename puslapyje. Pavyzdžiui 10 naujausių straipsnių šoninėje skiltyje, ar 10 atsitiktinai parinktų kokios nors temos straipsnių:
<?php global $post; // required
$args = array('category' => -9); // exclude category 9
$custom_posts = get_posts($args);
foreach($custom_posts as $post) : setup_postdata($post);
...
endforeach;
?>
Pasinaudodami WP_Query() ir query_posts() parametrais galime išrinkti praktiškai bet kokius straipsnius iš duomenų bazės. Atkreipkite dėmesį, kad ši funkcija reikalauja parametrų masyvo (array). Keletą parametrų galima užduoti taip:
$args = array('numberposts'=>3, 'category'=>-6,-9, 'order'=>'ASC');
Taip pat reikia atkreipti dėmesį, kad naudojamas ne posts_per_page o numberposts parametras.
Reziume
- Ciklas su query_posts() – jei norime pakeisti standartinio ciklo parametrus;
- Ciklas su WP_Query() – jei norime pakeisti ciklus ar sukurti ciklų rinkinius (multiple loops);
- Ciklas su get_posts() – jei norime sukurti statinius turinio blukus.
Sėkmingo “kilpų” statymo jūsų turiniui!
|
|
|
|
|
Dainius Tulaba http://eitne.lt || @EitneLT || Facebook profilis || Google+ profilis || dainius(eta)eitne.lt
Kompiuterių entuziastas, laisvalaikiu - svetainių kūrėjas, pagal išsilavinimą geologas ir be 5 minučių inžinierius. Tačiau visų pirma sutuoktinis ir tėvas. Portalo eitne.lt administratorius ir bendraautorius. Verslininkas, investuotojas, darbuotojas. |
| Panašūs įrašai | Kiti autoriaus įrašai | Kiti kategorijos įrašai |




