WordPressi teemaõpetus algajatele – 12. osa: kohandatud postituspäring
Selles viimases õppetükis õpime, kuidas kirjutada oma postituste päring ja neid läbi vaadata, ilma et katkestaksite malli põhitsüklit. Teeme üksikute postituste jaoks malliosa, mis näitab seotud postitusi samas kategoorias.
Selles õppetükis teeme seotud postituste päringu meie ühe postituse vaates, mis näitab maksimaalselt 3 postitust, postituse tüüpi postitust, mis on samas kategoorias või kategooriates kui postitus, mille juures praegu oleme, välista praegune postitus ise, ja randomiseerige kuvatud postitused. Uurime ka strateegiaid, kuidas pesastatud tsüklit sassi mitte ajada.
Seotud postituste mall
Teeme seotud postitused bitti malli osaks, millest saime teada 10 osas. Nii ei tee me liiga single.phpkeeruliseks ja muudame oma koodi korduvkasutatavamaks. Asetage selle uue malliosa taotlus kuhu iganes soovite. Panen selle vahetult enne kommentaaride malli taotlemist:
...
</article>
<?php
get_template_part('related-posts');
if (comments_open()) {
comments_template();
}
endwhile;
...
Nüüd loome oma teemakausta uue tühja faili ja paneme sellele nimeks related-posts.php. Selle failiga oleme valmis sukelduma kohandatud postituspäringu loomisesse.
Kohandatud postituse päring
Kui soovite teha postituste kohta kohandatud päringu, on teil mõned võimalused, kuid soovitan klassiga harjuda WP_Query. Lisage see dokumentatsioonileht järjehoidjatesse, kuna sellele sageli viitate, kuna valikuid on nii palju. Näitan teile praktilist näidet päringu seadistamisest, viidates iga spetsifikatsiooni dokumentatsioonile, mida tahame lisada.
Kui soovite rohkem teada saada, kuidas postitusi päringuid teha, on mul postitus, mis käsitleb just seda põhjalikult.
Kohandatud postituspäringu tegemiseks kutsume välja new WP_Query(), edastame sellele argumentide massiivi ja salvestame selle tulemuse muutujasse. Ja siis kasutame täpselt sama tsüklit, mida oleme varem oma mallides kasutanud (võrdluseks vaadake siin algset tsüklit ). Kuid me peame ütlema tsüklile, et see läbiks muutuja, mitte globaalse (mis on üks postitus).
Kui lisate selle kohandatud päringule, näeb see välja järgmine:
$related_posts = new WP_Query([
// Arguments here
]);
if ($related_posts->have_posts()) {
while ($related_posts->have_posts()): $related_posts->the_post();
// Access to each post here
endwhile;
wp_reset_postdata();
}
Nagu näete, on silmus täpselt sama, kasutades have_postsja the_post. Erinevus seisneb selles, et kutsume need $related_postsobjektile. Kui jätame selle $related_postsosa vahele, eeldab WordPress automaatselt, et see on postituste globaalne päring.
Samuti võite märgata funktsioonikutset wp_reset_postdata()kohe pärast tsüklit. Nii me "koristame enda järelt" pärast kohandatud päringut rakendusega WP_Query. Pidage meeles, et see the_post()seadistab globaalse postitusobjekti, et saaksime kasutada the_title()jne. Ja kuna oleme juba tsüklis (see, mis asub single.php), peame veenduma, et puhastame ja lähtestame postituse tagasi ühele postitusele pärast seda, kui oleme lõpetanud. Kui me järelandmeid ei lähtesta, viitab kõik pärast seda viimasele seotud postitusele, mille läbisime. See võib olla suur probleem! Meie näites sellele järgneb kommentaaride mall. Lähtestamise väljajätmisel kuvatakse kommentaarimallis viimase seotud postituse kommentaare. Ja mitte üksainus postitus, mida me tegelikult vaatame!
Meie kohandatud tsükli rakendamine
Olgu, alustame kohandatud tsükli juurutamist meie related-posts.php. Lisasin ümbrise ja pealkirja, kuid nagu tavaliselt, saate HTML-i vastavalt soovile kohandada:
<div class="related-posts">
<h2><?php _e('Related posts', 'wptutorial'); ?></h2>
<?php
$related_posts = new WP_Query([
]);
if ($related_posts->have_posts()) {
while ($related_posts->have_posts()): $related_posts->the_post();
endwhile;
wp_reset_postdata();
}
?>
</div>
Nüüd näeme malli osades korduvkasutatavuse võimsust. Oletame, et selle kohandatud tsükli sees tahame näidata täpselt sama sisu content-loop.php, mida me oma arhiivimallides kasutame. Peame vaid taotlema seda malliosa meie kohandatud tsüklis, kas oleme valmis iga postituse väljundit käsitlema!
...
while ($related_posts->have_posts()): $related_posts->the_post();
get_template_part('content-loop');
endwhile;
...
Nüüd jääb üle vaid lisada oma postituspäringule argumendid, veendudes, et toome selle, mida tahame. Vaatame argumendid ükshaaval läbi.
Argumentide loomine meie kohandatud postituspäringu jaoks
Soovime tuua mitte rohkem kui 3 postitust. Dokumentatsioonis (jaotises "Pagineerimisparameetrid") on selle argument posts_per_page. Seega lisame massiivi elemendi:
'posts_per_page' => 3
Tahame olla kindlad, et WordPress tõmbaks postitusi, mitte lehti või midagi muud. Jaotises "Postituse tüübi parameetrid" leiame:
'post_type' => 'post'
Tahame vältida seda, et üksainus postitus, mille juures oleme, ei ilmuks meie seotud postituste päringusse, sest sellel pole mõtet, eks? Dokumentatsioon ütleb meile jaotises „Postitus ja lehe parameetrid", et saame massiivi lisada postituse ID post__not_in:
'post__not_in' => [get_the_ID()]
Samuti tahame postitusi randomiseerida; sest vaikimisi hangib see uusimad avaldatud postitused ja see võib postituste läbimisel kiiresti üsna korduvaks muutuda. Õnneks on WordPressil selle jaoks postituste järjestamise funktsioon; jaotisest "Tellimine ja järjestamine parameetrite järgi" leiame:
'orderby' => 'rand'
Lõpuks tahame esitada päringu postituste kohta, mis on samades kategooriates kui meie postitus. Selleks peame esmalt, enne päringu argumente, viima kategooriad ühe postituse juurde, kus me oleme. Jaotises „Kategooria parameetrid” näeme, et saame pakkuda kategooria ID-de massiivi category__in. Õnneks on WordPressil funktsioon postituse kategooria ID hankimiseks; wp_get_post_categories()mida saame kasutada otse parameetri väärtusena. Täiuslik!
Siin on viimane päring ja selle argumendid:
...
<?php
$post_cats = wp_get_post_categories(get_the_ID());
$related_posts = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 3,
'category__in' => $post_cats,
'post__not_in' => [get_the_ID()],
'orderby' => 'rand'
]);
if ($related_posts->have_posts()) {
...
Värskendage ja peaksite nägema ühe vaate allosas 3 postitust. Värskendage mitu korda, et näha, et need muutuvad, kuna käskisime WordPressil need juhuslikult jagada. Märkus. Kui teil on samas kategoorias vähem kui 3 postitust, saate alla 3 postituse.
See on kõik! Nüüd teate, kuidas teha päringuid mis tahes postituste kohta, mida soovite. WP_Query dokumentatsioonileht on päringu kohandamisel väga kasulik, sest siin on tõesti piiramatud võimalused. Soovitan teil parameetritega ringi mängida ja võib-olla proovige teha seotud postituste jaoks eraldi malliosa.