Zvýraznění aktuálního měsíce v celkovém výpisu archivu

Nedávno se objevil dotaz na možnost zvýrazňování aktuálního měsíce v přehledném výpisu archivu, takže jsme se zkusili poohlédnout po nějakém jednoduchém řešení, aniž bychom museli modifikovat zdrojové kódy WordPressu či použít nějaký plugin. A nakonec je to jednodušší než to původně vypadalo a funguje to jak v archivu zobrazovaném v šabloně pomocí funkce wp_get_archives(), tak i ve widgetu Archiv. A jak tedy na to?

U rubrik a stránek je zvýrazňování aktuální položky možné vcelku jednoduše. Ve výpisu rubrik pomocí funkce wp_list_categories() je automaticky používán parametr current_category, který v celkovém výpisu přiřazuje aktuální rubrice třídu current-cat, kterou si pak už můžete libovolně nastylovat (funkční od WordPressu 2.6). Také výpis stránek pomocí funkce wp_list_pages() s touto možností počítá a má dokonce ještě více možností a tříd souvisejících s možnou nadřazeností stránek, ale obecně řečeno je tam opět třída current_page_item, která označuje právě vybranou stránku v celkovém výpisu.

Poznámka: Vše výše uvedené platí samozřejmě pouze pro zvýrazňování aktuální položky ve vygenerovaném seznamu pomocí výše uvedených funkcí. Pokud chcete nějak označovat aktuální položku (rubriku, stránku, …) např. v drobečkové navigaci, tak to už je zase trochu jiný příběh.

U archivu sice bohužel pro zvýraznění aktuálního měsíce žádná vestavěná možnost není, ale vývojáři WordPressu mysleli i na všetečné uživatele, kteří by něco podobného chtěli a nabízejí nám alespoň malá zadní vrátka v podobě filtru get_archives_link, který je právě pro tyto případy určen. Stačí si tedy napsat krátkou funkci (inspirace zde), kterou si vložíte do souboru functions.php v adresáři se šablonou (nebo do samostatného .php souboru jako samostatný plugin):

<?php
// Zvýrazní aktuální měsíc v archivu (1)
function get_archives_link_upraveno ( $link_html ) {
   preg_match ("/href='(.+?)'/", $link_html, $url);
   $requested = "http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}";
      if ( $requested == $url[1] ) {
         $link_html = str_replace("<li>", "<li class='aktualni-archiv'>", $link_html);
      }
      return $link_html;
   }
add_filter("get_archives_link", "get_archives_link_upraveno");
?>

A co tato funkce vlastně přesně dělá? Vezme vygenerovaný HTML výpis měsíců, vybere z něj všechny odkazy na jednotlivé měsíce, zjistí si aktuálni URL adresu a porovná ji s nimi. A v případě, že se shoduje aktuálně zobrazená URL adresa s nějakým odkazem v celkovém výpisu, tak přidá k HTML značce <li> ještě třídu aktualni-archiv. Takže už pak stačí jen přidat do souboru style.css nějaké jiné zobrazení a aktuální měsíc bude zobrazen tučným písmem, např.

.aktualni-archiv { font-weight: bold; }

Samozřejmě třídu můžete pojmenovat jinak a nemusíte ji přidávat pro HTML značku li, ale klidně třeba i pro a. Ukážu to ještě na jiném (podobném) příkladu (inspirace zde):

<?php
// Zvýrazní aktuální měsíc v archivu (2)
function get_archives_link_upraveno ( $link_html ) {
   $cata = single_month_title('', false);
   $catb = preg_replace("/[\n\t]/", '', str_replace(' ', '', strip_tags($link_html)));
      if ( $cata == $catb ) {
         $content = str_replace('title', 'class="aktualni-archiv" title', $link_html);
      }
   return $link_html;
}
add_filter('get_archives_link', 'get_archives_link_upraveno');
?>

Způsob nahrazování pomocí php funkce str_replace je v obou případech podobný, princip zjišťování aktuálního měsíce je trochu jiný, bohužel ve druhém příkladu nefunguje, pokud máte v archivu zobrazen i počet příspěvků v jednotlivých měsících. Obě možnosti můžete libovolně kombinovat, zatím jsem se bohužel nedostal k jejich podrobnému otestování (např. jaký způsob je výkonnější). Pokud bude zájem, tak to můžeme vydat i jako samostatný plugin, ale myslím, že je to vcelku zbytečné a alespoň blíže nahlédnete pod pokličku fungování WordPressu, jeho funkcí a API. Připomínky a komentáře jsou samozřejmě vítány. Víte třeba o nějakém pluginu, který to umožňuje?

Nejoblíbenější hosting pro WordPress WEDOS.cz

6 thoughts on “Zvýraznění aktuálního měsíce v celkovém výpisu archivu”

  1. No, nic jednoduššího jsem bohužel nenašel, ale je možné, že existuje i jiné řešení. Třeba má někdo s tímto problémem zkušenost a podělí se…

  2. Ivo: Díky moc za odkaz. Ano, je to podobný způsob řešení, trochu “úsporněji” sepsaný… Vypadá to, že nic jednoduššího zatím neexistuje, chtělo by to asi zadat vývojářům ticket, aby tam nějakou třídu automaticky generovali…

  3. Dobrý den, jako běžný uživatel, který používá wordpress k tvorbě blogu (a jinak do toho moc nevidí) se potýkám u archívu s problémem, že se tam zobrazuje jen určitý počet měsíců a v závorce počet příspěvků, ale dále do historie se nedá dostat. Tedy já jako admin se tam dostanu z přehledu příspěvků, ale mám stránky zaheslované pro čtenáře a ti již možnost listování v archívu nemají. Může mi někdo poradit kde a co nastavit? Děkuji.

  4. Panda: Musíš si prohlédnout soubory šablony (obvykle je to v souboru sidebar.php) a nalézt tam někde funkci wp_get_archives(). Jako jeden z parametrů tam bude mít patrně uvedeno limit=číslo, které ukazuje maximální počet zobrazovaných měsíců do minulosti. Stačí toto číslo libovolně navýšit nebo klidně smazat celý parametr limit=číslo. Nebo by to mohlo být chování nějakého pluginu, ale to je těžké bez dalších podrobností odhadnout (klidně se ale ozvěte, dáme to dohromady).

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *