Vlastní WordPress šablona #2 – Výpis článků


Vypisování obsahu je věc, na které každá šablona stojí a padá. Proto si ve druhém díle tutoriálu ukážeme jak se pracuje s tzv. loopem článků a jak je na něj navázána struktura url odkazů.

Struktura odkazů ve WordPressu

Pokud ve WordPressu přistoupíte na hlavní stránku, pošlou se do šablony data pro výpis všech článků z blogu. S omezeným stránkováním samozřejmě. Takže za url pak stačí přidat /page/2 a do šablony se pošle dalších x příspěvků. Na podobném principu fungují archivy datumů (/2015 vypíše články z roku 2015, /2015/11 vypíše příspěvky pro listopad 2015), kategorií, tagů, autorů a vůbec všeho. Všechna tato pravidla jsou pevně daná. Teoreticky lze upravovat některé pravidla, ale ale vyplatí se řídit se těmi obecnými.

Princip je stejný ať už máte zapnuté či vypnuté trvalé odkazy. Obdobně se chovají i výpisy detailu stránek a příspěvků. I je to pro WordPress loop článku, ačkoliv má pouze jednu položku.

Výpis článků

Jak už jsem zmínil v minulém díle tutoriálu, šablonu stránky budeme nyní vkládat do souboru index.php. Nejjednodušší loop vypadá nějak takto.

<!--  Byly nalezeny nějaké články?  //-->
<?php if (have_posts()) { ?>
    <ul>
        <!--  Cyklus, který projde všechny články v loopu  //-->
        <?php while (have_posts()) { ?>
            <!--  Nastavý aktuální článek jako aktivní  //-->
            <?php the_post(); ?>
            <!--  Vypíše jeho title  //-->
            <li><?php the_title(); ?></li>
        <?php } ?>
    </ul>
<?php } else { ?>
    <!--  Žádné články nebyly nalezeny, zobraz chybu 404  //-->
    404: Žádný článek nebyl nalezen.
<?php } ?>

Jde o velice jednoduchý script. Nejdříve zjistíme, zda je vůbec jaké články vypisovat a v případě že ne, zobrazíme krátkou chybovou hlášku. V praxi jde o error 404. Nastane, pokud uživatel poptá článek, který neexistuje, nebo přijde na měsíc, ve kterém nebyl napsán žádný článek nebo si bude hrát se stránkováním v url.

V případě že jsou články nalezeny, následuje klasický while cyklus. Nejdříve je nutné pomocí funkce the_post aktuálně procházený článek aktivovat, aby se mohly začít používat metody pro vypisování titulku, obsahu, náhledového obrázku a podobně. O něco málo obsáhlejší případ může vypadat takto:

<!--  Byly nalezeny nějaké články?  //-->
<?php if (have_posts()) { ?>
    <!--  Cyklus, který projde všechny články v loopu  //-->
    <?php while (have_posts()) { ?>
        <!--  Nastavý aktuální článek jako aktivní  //-->
        <?php the_post(); ?>
        <article <?php post_class(); ?>>
            <h2><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></h2>
            <?php the_content(); ?><br />
            Kategorie: <?php the_category(', '); ?><br />
            <?php the_tags('Štítky: '); ?><br />
            Publikováno: <?php the_time(); ?> <?php the_date(); ?>
            <hr />
        </article>
    <?php } ?>
<?php } else { ?>
    <!--  Žádné články nebyly nalezeny, zobraz chybu 404  //-->
    404: Žádný článek nebyl nalezen.
<?php } ?>

Nyní se nám v seznamku článků objeví nejen titulek, ale i obsah, kategorie, štítky a datum publikace. Velmi užitečné je použití funkce post_class(), která sekci přidá velké množství tříd. Výsledek může vypadat takto:

<article class="post-58 post type-post status-publish format-standard hentry category-child-category-i category-parent-category-i category-parent-category-ii tag-tag2 tag-tag5 tag-tag6">

Lze pak poměrně jednoduše nastavovat styly pro různé články, různé typy článků, kategorie a štítky. Pro rychlé úpravy to je neocenitelné a zvládne je i někdo, kdo neovládá PHP.

the_content vs get_the_content

Ještě než přejdeme dál, rád bych vysvětlil rozdíl mezi funkcí the_content a get_the_content (podobných dvojic je ve WordPressu více, ale následující text platí jen pro tu jednu). Na první pohled by se mohlo zdát, že jediný rozdíl je ten, že get_the_content má návratovou hodnotu zatímco the_content ji rovnou vypíše:

<?php the_content(); ?>
<?php echo get_the_content();?>

Ale pozor! Výstup těchto dvou funkcí v ukázkovém kódu není stejný. Při výpisu pomocí the_content jsou na obsah použity různé filtry (například se automaticky doplní odstavce), ale u get_the_content tomu tak není. Pokud bychom chtěli použít ekvivalent the_content, který ale vratí návratovou hodnotu, musí se použít apply_filters(‘the_content’, get_the_content()). 

A ještě dejte pozor na názvy funkcí, nejsou vždy konzistentní. Máme sice the_permalink ale už není get_the_permalink ale jen get_permalink. Pro seznam a dokumentaci všech funkcí, které se dají pro výpis jednotlivých částí článku použít, navštivte Codex. Před použitím každé z metod si doporučuji projít, co všechno umí, ve výsledku vám to může ušetřit hodně času.

Aktuální stav šablony

Do šablony jsme přidali vypisování článků. Ty se zobrazují jak v archivech (homepage, archivy kategorií, datumů, autorů, vyhledávání, ..) tak i v detailu. Styl je zatím pro všechny stejný. V příštím díle si ale ukážeme, jak do šablony dostat jak kaskádové styly, tak různé šablony pro různé výpisy.

A aktuální zdrojové kódy k dispozici opět na GitHubu.