WordPress – tvorba šablony od A do Z – 4.díl – Rubriky


Za poslední tři díly jsme naší šablonu už něco naučili. Umíme vytvářet menu pomocí WP nástroje, vypisujeme poslední příspěvky (články) a používáme statické stránky pro psání běžného obsahu. Dnes se pustíme do kategorií (category), do kterých lze řadit příspěvky, filtrovat je na příslušné kategorie a tím dát naší šabloně další zajímavou funkci. Píšu sice kategorie, ale v CZ jazyce po instalaci se bude tato část tvářit jako „rubriky“, ale jde pouze o slovíčkaření. Pojďme na to…

Kde rubriky jsou a co to vlastně je?

Věřím, že tady není moc co vysvětlovat, protože rubriky u příspěvků se považují za základní funkce a jsou dostupné ve všech šablonách (pokud neřekneme jinak) a můžeme je začít hned používat. Rubrikou neříkáme nic jiného, než kam daný příspěvek patří. Pěkný příklad rubrik je přímo na tomto webu, kde v pravé části blogu je seznam všech rubrik. Když návštěvník na příslušnou rubriku klikne, WP mu nabídne pouze ty příspěvky, které do této rubriky patří.

Rubriky a jejich „číselník“ nalezneme po najetí na příspěvky a zvolíme „rubriky“. V tomto prostoru si můžeme rubriky zakládat, mazat a měnit. K tomu, abychom však mohli příspěvky z rubriky vypisovat, budeme potřebovat nový soubor, který nazveme category.php. Tento soubor bude volán vždy, když návštěvník zvolí nějakou rubriku. WP najde o kterou kategorii se jedná, vrátí do category.php příslušné data a vypíše je. Jak tedy takové category.php bude vypadat?


<?php get_header(); ?>
<div id="content">
        <h1>Články z rubriky - <?php single_cat_title(); ?> </h1>
        <p><?php echo category_description(); ?></p>
        <?php if (have_posts()) : ?>
	   <?php while (have_posts()) : the_post(); ?>
		<?php get_template_part('loop', 'single'); ?>
	   <?php endwhile; ?>
        <?php endif; ?>

</div> 
<?php get_footer(); ?>

Jednoduché, že? Toto nám bude stačit, protože o zbytek se postará WP díky správně pojmenovanému souboru category.php. určitě jste si všimli funkce single_cat_title(), která nám bude vracet jméno rubriky. Pro dobré SEO jsme si ještě přidali úvodní text pod nadpise H1. Pokud si všimnete, v administraci v sekci pro správu rubrik může uživatel ke každé rubrice zadat krátký popisek a ten právě využijeme a necháme ho vepsat pomocí funkce – category_description(). Tato funkce se volá mimo WP loop a vrací popisek rubriky v rámci category.php.

Nyní nám šablona začne vypisovat příspěvky na základně zvolené rubriky. Můžeme si také celý vzhled výpisu předělat a udělat trochu jiné rozložení než třeba u stránek page.php nebo single.php. Proč u výpisu rubrik nenabídnout třeba po pravé straně další články z jiných rubrik a jinde ne-e? Díky takto strukturovanému obsahu můžeme kontrolovat jednotlivé vzhledy a výpis obsahu vždy přímo v souboru.

Vzhled pouze pro jednu rubriku

Pokud se podíváte do WP Codexu na strukturu vypisování rubriky zjistíte, že nám WP nabízí mnohem větší variabilitu než pouze ve výpisu všech rubrik.

Pokud uživatel klikne na link (který jsme si ukázali ve 3. díle tohoto seriálu), WP začne pátrat po jednotlivých souborech a to v následujícím pořadí:

  1. category-{slug}.php
  2. category-{id}.php
  3. category.php
  4. archive.php
  5. index.php

slug – to je název, který WP generuje při zadání názvu rubriky. Je to stejný klíč, který používá v url. Pokud založíte rubriku: „Nové články“ WP slug bude vypadat takto – nove-clanky.

Pokud bychom měli v naší šabloně category-nove-clanky.php, tak se příspěvky z této rubriky vrátí do tohoto souboru a ne do category.php. Tímto způsobem můžeme měnit vzhled výpisu jednotlivých kategorií. Není to však příliš dynamické, ale rozhodně použitelné. Stejně tak můžeme použít kombinaci s ID rubriky. Pokud bude existovat rubrika s ID 5, tak můžeme založit soubor category-5.php a všechny příspěvky z rubriky s ID 5 budou vraceny do příslušného souboru.

Ve chvíli, kdy WP nenajde žádné z těchto kombinací, bude volat category.php. Když nebudeme mít založen ani tento soubor, postupuje dále v předepsané cestě viz výše uvedený číselný seznam.

Jak získat link na rubriky

WP Nám nabízí několik cest, jak uživateli nabídnout jednotlivé linky do příslušných rubrik. Ta nejzákladnější je použít widget, který je v základu WP a natáhnout ho do sidebaru, jako je tomu na tomto blogu. Protože naše šablona zatím žádný sidebar ani widgety nemá, musíme to vyřešit jinak.

Získání url pro jednu rubriku (categorii)


V případě, že známe ID rubriky, není nic jednoduchého, než zavolat funkci get_category_link() a tím dostaneme url kterou už snadno použijeme v a tagu.

Získání několik rubrik nebo všech najednou


<?php
  $rubriky = get_categories() ;

  if($rubriky){
  	echo '<ul>';
  	foreach ($rubriky as $value){
  		echo '<li><a href="'. get_category_link($value->cat_ID) .'" title="'. $value->cat_name .'">'. $value->cat_name .'</a></li>';
  	}
  	echo '</ul>';
  }

 ?>

Funkce get_categories() nám bez zadaných parametrů vrátí všechny rubriky. Na příslušném linku ve WP codexu se můžete dozvědět více o možnostech parametrů a jak lze data ohledně rubrik získávat. Funkce nám toho nabízí skutečně mnoho. Výše uvedený příklad nám vytvoří jednoduchý seznam s odkazy do jednotlivých rubrik a s kombinací s category.php máme nástroj na třídění příspěvků (článků) do rubrik.

Závěrem

Naše šablona dnes už umí i třídění příspěvků do rubrik a ukázali jsme si, jak lze linky na jednotlivé rubriky získávat, jak ovlivnit vzhled pro jednu rubriku a jak získat ul seznam s rubrikami. Myslím, že naše šablona začíná dostávat svou „blogovou“ podobu. V příštím díle se pustíme do menší úpravy některých „vychytávek“ a vytvoříme si sidebar.php, který nám umožní v šabloně používat widgety.

Tomáš Kocifaj, KTStudio.cz

, , , ,

  1. #1 tomas 15.1.2014 - 19:43

    kod pro vypis vypis vice rubrik najednou jak je uveden nize se zapisuje take souboru category.php? Diky

    • #2 Tomáš Kocifaj 15.1.2014 - 20:09

      Zdravím tě, celý zápis je závislý na iteraci proměnné $rubriky. Do této proměnné se vrátí data z funkce get_categories() – není tedy nutné být v template category.php. Funkci můžeme volat kdekoliv – Patička, sidbar, hlavička, menu, atd..

Komentáře jsou uzavřeny.