Ako zakázať zobrazovanie dátumu vo WordPress-e

WordPress je primárne určený na písanie blogov – a každý článok na blogu má dátum a čas publikovania. Čitateľ sa tak vie orientovať, či je daná informácia ešte aktuálna alebo nie. Občas sa však vyskytnú typy článkov, u ktorých je zobrazenie dátumu publikovania neželané. Napríklad keď WordPress používate ako statickú prezentačnú stránku a nie ako „blog“. Ako zakázať zobrazovanie dátumu publikovania (u vybraných článkov) vo WordPress-e? V tomto podrobnom návode nájdete možné riešenia, vrátane môjho odporúčania ako na to správne.

Články ako Stránky

Stránky síce interne dátum publikovania majú, ale väčšina tém ho nezobrazuje. Takže áno, je to jedno z možných riešení (asi aj najjednoduchšie). Každopádne, „články“ sú články a „stránky“ sú zase stránky a ich význam by sa zamieňať nemal – existencia každého z nich má svoje dôvody. Navyše, ak máte rozsiahlejší web časom prídete na problém, že u niektorých príspevkov dátum chcete a niekde zase nie. A mixovať články a stránky do jedného výpisu jednoducho nejde.

Nájdite tému, ktorá dátumy nezobrazuje

Najlepšie sú hotové riešenia. Avšak výber tém bez dátumu je obmedzený, budete sa musieť značne prispôsobiť a vlastne – rýchlejšie ako vhodnú tému nájsť, je upraviť existujúcu, ktorá vám inak vyhovuje.

Nájdite vhodný plugin

Keby existoval plugin, ktorý by vedel zakázať zobrazenie dátumu podľa rôznych kritérií, bolo by som vyrehotaný ako lečo (a nemusel písať tento článok). Vyhovujúci plugin som však nenašiel. Opravte ma ak sa mýlim.

Riešenie cez CSS

Riešenie cez modifikáciu CSS môžete použiť vtedy, ak vám postačuje zakázať zobrazenie dátumu globálne pre všetky články. Otvorte html kód stránky (F12) a nájdite, kde sa vypisuje dátum. Ak máte šťastie a téma je napísaná dobre, dátum bude jasne ohraničený vlastným tagom s príslušnou triedou.

Príklad zobrazenia dátumu v téme Twenty Sixteen:

<time class="entry-date published updated" datetime="2013-01-09T09:00:39+00:00">9. januára 2013</time>

V čom spočíva toto riešenie? Dátum na stránke necháme, len zakážeme web prehliadačom aby ho zobrazovali. Ak používate vlastnú odvodenú tému, doplňte nasledovné do svojho súboru style.css. Ak používate tému bez vlastnej modifikácie, zapnite si rozšírenie Custom CSS v rámci pluginu Jetpack a nasledovné riadky pridajte v administrácii do editora css (Vzhľad -> Upraviť CSS):

.entry-date {
    display: none;
}

Poznámka: namiesto „entry-date“ zadajte názov css triedy podľa vami použitej témy!

Riešenie cez CSS je síce jednoduché, avšak nie dokonalé:

  • Zakážete zobrazovanie dátumov pre všetky príspevky.
  • Nie všetky témy majú dátum takto elegantne ohraničený. Napríklad moja téma má autora a dátum ako jeden html tag, čiže to môžem zakázať buď celé alebo nič.
  • Dátum sa síce nezobrazuje, ale roboty, ktoré kaskádový štýl nezaujíma, ho napriek tomu vidia.

Priama úprava témy

Čo a ako WordPress zobrazuje je záležitosť „témy“. Témy sa štandardne nachádzajú v adresári wp-content/themes/nazov. Nájdite teda v php súboroch aktuálne používanej témy miesto, kde sa vypisuje dátum a modifikujte príslušnú časť kódu. Zámerne nenapíšem kde ani čo máte hľadať :-).

Lebo aby bolo jasné, toto riešenie „na hulváta“ zásadne neodporúčam a uvádzam ho len pre úplnosť. WordPress je síce opensource, to však neznamená, že by ste mali priamo upravovať časti kódu, ktoré napísal niekto iný. Jedným z dôvodov je, že v prípade aktualizácie témy sa vaše modifikácie stratia a vy ich budete musieť urobiť znovu. Ak máte iba jednu stránku, dá sa to zvládnuť. Ak však spravujete stránok viac, pamätať si kde máte čo modifikované je na mašľu.

Úprava odvodenej témy

Lepšou možnosťou ako priama úprava témy je vytvorenie vlastnej odvodenej témy, ktorá bude mať modifikovanú len príslušnú časť, kde sa vypisuje dátum. Návod ako vytvoriť odvodenú tému. Teraz sa môžete rozhodnúť, či modifikáciu spravíte na úrovni celého súboru alebo iba funkcie. (Ak sa dá, tak funkcia je lepšia.)

Úprava na úrovni súborov

V prípade odvodenej témy platí, citujem: „Odvodená téma môže prekonať akúkoľvek šablónu nadradenej témy jednoduchým použitím súbora s rovnakým názvom.“

Čiže ak viete, že dátum sa vypisuje kdesi v súbore s názvom (napríklad) single.php, tento si skopírujte do svojej témy a tam urobte príslušné úpravy. Všetky ostatné php súbory budú použité z rodičovskej témy, iba single.php sa bude používať z témy odvodenej.

Problémy: V našom príklade sme úpravou súboru single.php vyriešili zobrazenie dátumu pre „celý článok na jednu obrazovku“. Dátum sa však nachádza aj v Zozname článkov, v časti Odporúčame a pod. Museli by sme postupne upravovať veľkú časť zdrojových súborov témy. Navyše v prípade, ak bude vydaná nová verzia témy, mali by ste si opätovne skopírovať zmenené súbory a vykonať v nich vlastné zmeny – lebo neviete čo sa vlastne zmenilo, čiže ponechať php súbory zo starej verzie nemusí robiť dobrotu. Dúfam, že už chápete, ale ani toto nie je ideálne riešenie.

Úprava na úrovni funkcie

Poďme na to teda inak – máte urobenú odvodenú tému. A navyše ste zistili, že autor rodičovskej témy si na vypisovanie hlavičky článku vyrobil nejakú inteligentnú funkciu. Príklad z témy „twentysixteen“ – pozri v súbore wp-content/themes/twentysixteen/inc/template-tags.php

if ( ! function_exists( 'twentysixteen_entry_date' ) ) :
    function twentysixteen_entry_date() {
        // tu vypis datum
    }
endif;

Podstatný pre nás je hneď prvý riadok. Funkcia twentysixteen_entry_date() bude deklarovaná iba v prípade, ak už takáto funkcia neexistuje predtým. Pričom platí, že najprv sa volajú súbory z odvodenej témy a až potom súbory z témy rodičovskej.

Na základe tejto znalosti je už riešenie v celku jednoduché. Našu modifikáciu umiestnime do súboru functions.php v rámci našej odvodenej témy. Lebo platí, že functions.php z odvodenej témy sa načíta ako doplnok k functions.php rodičovskej témy – konkrétne, načíta sa priamo pred súborom rodičovskej témy. Ak teda vyrobíme vlastnú funkciu twentysixteen_entry_date() zabránime tým, aby sa použila tá originálna. Skopírujte si do svojho functions.php celú pôvodnú funkciu a modifikujte ju podľa potreby.

function twentysixteen_entry_date() {
    // tu V ZIADNOM PRIPADE NEvypis datum
}

Riešenie je to podstatne lepšie, lebo už nekopírujeme celé súbory, iba jednu funkciu. Pripomínam však, že funguje iba v prípade, ak je zobrazovanie dátumu ošetrené cez funkciou a nie roztrepané ako separé volania po všetkých php súboroch témy. Problém s aktualizáciou však stále pretrváva – v prípade zmeny verzie témy bude potrebné znovu kontrolovať, či nedošlo k zmene funkcie na vypisovanie dátumu v rodičovskej téme a ak áno, prevziať jej obsah. Rozsah práce by však už nemal byť taký náročný.

Filter hook

Sedem verzií ako sa to nemá robiť… A čo je teda správne? Víťazom je, priatelia moji, niečo čo sa volá filter hook. WordPress je vymyslený ako modulárny systém. Každý môže doplniť alebo modifikovať v podstate hociktorú jeho časť. Avšak nie zbytočným kopírovaním celých častí ako som popísal v odstavcoch vyššie, ale „zavesením“ sa na jeho existujúce funkcie.

Čo to znamená si vysvetlíme na modelovom príklade. Predstavme si jednoduchú štandardnú funkciu z balíka WordPress, ktorá čosik robí, napríklad vytiahne nejakú info o článku z databázy. Táto funkcia vyzerá nejako takto:

function std_wp_zobrazInfo () {
    // Nacitaj $data
    // Formatuj $data
    return apply_filters('filter_name', $data);
}

Všimnite si ako WordPress vracia údaje – cez volanie funkcie apply_filters. Táto konštrukcia je použitá práve z toho dôvodu, aby ste sa na túto štandardnú funkciu mohli neskôr „zavesiť“ so svojou podomácky vyrobenou funkciou a jej výstup ešte modifikovať. Príklad:

function home_made ($input) {
    // Nieco nad tym $input zrob, nech je lepsi
    return $output;
}
add_filter('filter_name','home_made');

Šikovnejší už asi tušia, ako to funguje. Práve volanie add_filter zabezpečí, že moja funkcia je „zavesená“ na výstup štandardnej WordPress funkcie a teda pred vrátením jej výstupu mám ešte šancu kecať do toho, ako bude tento výstup vyzerať. Kľúčovým spojivkom je práve filter_name, ktorý určuje, na ktorú funkciu sa idem napojiť.

Aj keď nie každý tvorca témy a rozšírenia dodržuje tento úzus a umožňuje napojiť sa na jeho funkcie (t.j. pridáva volanie apply_filters na výstupy svojich funkcií), môžete sa minimálne spoľahnúť, že štandardné core funkcie to majú ošetrené. Pozri zoznam filter_name.

Zákaz zobrazenia dátumu na základe kategórie

Spravte si vlastnú odvodenú tému. Vytvorte v nej súbor functions.php a pridajte do neho:

function uprav_datum($datumcas) {
    if( in_category('katka') ) return 'sex';
    return $datumcas;
}
add_filter('get_the_date','uprav_datum',100);

Ako to funguje? Vytvorili sme filter funkciu, ktorá na základe kategórie, do ktorej patrí daný článok, rozhodne či bude dátum publikovaný alebo nie. (Namiesto dátumu vráti slovko „sex“ aby sme videli, či to funguje.) Parameter „katka“ pritom môže byť id číslo danej kategórie, alebo slug alebo jej názov. Našu funkciu následne „zavesíme“ na štandardnú WordPress funkciu, ktorá poskytuje dátum publikovania článku. Parameter 100 určuje prioritu, v akej majú byť jednotlivé filtre volané. Teraz chceme, aby bol náš filter ako posledný, preto som zámerne použil vysoké číslo (štandard je 10).

Výhody:

  • Zobrazovanie dátumu je vyriešené na celej stránke – t.j. všade tam, kde sa používa volanie funkcie get_the_date(). Pritom sme to spravili na 5 riadkov!
  • Dátumu nezobrazujeme iba pre vybranú kategóriu článkov (nie plošne).
  • A nerozhádže nás už ani nová verzia témy či samotného jadra, pretože naša modifikácia bude stále zavesená na výstup štandardnej funkcie.

Zákaz zobrazenia dátumu na základe vlastného poľa

WordPress umožňuje ukladať ku každému článku vlastné doplňujúce informácie – viď časť „Vlastné polia“ na obrazovke „Upraviť článok“ v administrácii:

Vlastne-polia

Vlastné polia môžete využiť v téme, plugine a pod. Napríklad cez ne ovládať aj zobrazovanie dátumu článku:

function uprav_datum($datumcas) {
    $vp = get_post_custom_values('disable_datum');
    if($vp[0] == 1) return 'sex';
    return $datumcas;
}
add_filter('get_the_date','uprav_datum', 100);

Aby vám tento spôsob fungoval, nazabudnite pridať k predmetnému článku vlastné pole s názvom „disable_datum“ a naplniť mu hodnotu 1 (viď obrázok hore).

Záver

Ako môžete vidieť, možností ako zakázať zobrazenie dátumu publikovania článku vo WordPresse je veľa – niektoré sú lepšie, iné horšie. Konkrétne riešenie záleží najmä od použitej témy a toho ako kvalitne je napísaná. Dúfam však, že som aspoň trochu mohol. Otázky, poznámky, doplnenia a ďakovačky píšte, prosím, do komentárov 🙂

PS: Všetky príklady som parciálne testoval, no negarantujem, že vám budú fungovať :-). Pri testoch nebolo ublížené deťom, zvieratám ani rastlinám.


Použitá fotografia: Tube Flip Calendar & Clock / Autor: Rendy Aryanto / Licencia: FreeImages License

Gendzo

Cez deň pracujem ako IT manažéris. Po nociach robím vlastné web stránky a píšem články. Rád varím, cestujem a lúštim hlavolamy. Vo voľnom čase cvičím power jogu, čítam knihy a hľadám geokešky. A som šťastný majiteľ jednej skvelej manželky a dvoch detí k tomu. www.gendzo.sk/autor/gendzo-macher

2 komentáre

  1. 29.11.2016

    […] rovnako ako filter hook, ktorého použitie som vysvetľoval v mojom predchádzajúcom návode Ako zakázať zobrazovanie dátumu vo WordPresse. Jediný rozdiel je, že kým filer hook modifikuje dátový výstup nejakej funkcie, action hook […]

  2. 08.08.2017

    […] Pri práci s WordPress-om sa môžete dostať do stavu, že aktuálne použitá téma vyhovuje tak na 99%, avšak chcete v nej zmeniť nejaké drobnosti. Napríklad farbu, font, veľkosť písma, veľkosť medzier, alebo chcete pridať/modifikovať správanie stránky pri zobrazovaní článku – napríklad zakázať zobrazovanie dátumu publikovania. […]

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *