WordPress 4.1: Nová funkce pro titulek stránky (title)

Autoři šablon budou mít z chystaného WordPressu 4.1 určitě radost, protože jim pomocí nových funkcí zase trochu zjednoduší práci při tvorbě šablon.

Titulek stránky (title) je velmi důležitou součástí webu, kterou se určitě vyplatí pozorně sledovat a správně nastavit. Občas stačí i drobná změna (např. uvedení vhodného klíčového slova) a vyhledávače začnou web posuzovat zcela jinak, což může ovlivnit i návštěvnost.

Každá šablona ale přistupuje k zobrazování titulku trochu jinak, někdy bohužel nepříliš dobře. A tak si uživatelé postupně oblíbili různé SEO pluginy, které umožňují titulek snadno nastavit podle aktuálních potřeb. Nyní se však ve WordPressu 4.1 snad konečně dočkáme jednoduché funkce, která se stane do budoucna standardem a nebude nutné nasazovat plugin jen kvůli drobné úpravě. Zkusím ale nejdříve popsat dosavadní vývoj, aby bylo zřejmé, v čem bude spočívat hlavní výhoda.

Ani samotný WordPress dříve nedával pro titulek zrovna ideální příklad, zejména pokud zavzpomínáte na prastarou výchozí šablonu Kubrick, kde se v souboru header.php objevoval následující kód:

<title><?php wp_title('&laquo;', true, 'right'); ?> <?php bloginfo('name'); ?></title>

V čem byl konkrétně problém? Správně byla sice použita funkce wp_title(), takže bylo možné použít např. v odvozené šabloně stejnojmenný filtr wp_title, ale bohužel jste mohli tímto způsobem standardně upravit pouze první část titulku a pořád tam zůstával název webu, i když jste ho tam třeba vůbec nechtěli (nebo v jiném pořadí). Způsobovala to natvrdo použitá funkce bloginfo() a obejít to šlo buď zkopírováním a úpravou souboru header.php v odvozené šabloně nebo právě použitím nějakého pluginu.

SEO pluginy tak musely používat nestandardní způsoby, tedy output buffering. Nechci se pouštět do hodnocení vhodnosti či náročnosti tohoto způsobu, ale obecně je v tomto případě generovaný obsah ještě před samotným zobrazením načten do proměnné, kde je možné s titulkem ještě pracovat a až poté jsou informace odeslány do prohlížeče pro uživatele. Pokud používáte oblíbený plugin WordPress SEO, tak jde o zaškrtávátko “Force rewrite titles” (česky nepříliš povedené “Vynutit přepsání nadpisů”), které najdete v menu SEO – Titles & Metas a měli byste ho v případě problémů (např. duplicitní části textů v titulku) použít.

Novější výchozí šablony WordPressu už přinesly vhodnější příklady a používaly pouze funkci wp_title(), např. Twenty Fourteen:

<title><?php wp_title( '|', true, 'right' ); ?></title>

Funkce wp_title() však také není všemocná, takže musely být ještě specifikovány některé detaily (např. kdy a jak se bude používat název webu), takže vznikaly funkce na způsob twentyfourteen_wp_title(), která se napojovala na filtr wp_title v souboru functions.php. A co tato funkce vlastně řešila? Doplňovala do titulku název webu (který už nebyl uveden natvrdo přímo v souboru header.php), na úvodní stránce zobrazovala kromě názvu webu i jeho popis a řešila také stránkování, aby nedocházelo k duplicitním titulkům při procházení archivu se staršími příspěvky (zdrojový kód).

Příklad fungování funkce twentyfourteen_wp_title() je možné vidět i přímo na tomto webu:

separatista.netSeparatista | Čeština pro WordPress (doplněn popis webu na úvodní stránce)

separatista.net/page/2 – Separatista | Čeština pro WordPress | 2. stránka (doplněno stránkování při procházení archivu)

separatista.net/wordpress/zajimavosti/proc-nepouzivat-disqus-pro-komentare – Proč nepoužívat Disqus pro komentáře? | Separatista (doplněn název webu)

Pro odvozené šablony a pluginy už byl tento způsob vcelku bezproblémový. Prémiové (často používané) šablony však bohužel často zůstávaly u svých starých způsobů a bez pluginů (a jejich output bufferingu) byly i drobné úpravy zbytečně složité.

Postupně se ale vymýšlelo řešení, které by bylo ještě jednodušší a zároveň splňovalo zásadní požadavek, což byla zpětná kompatibilita. Nikdo totiž nechtěl rozbíjet miliony webů se starými šablonami a rozhněvat si uživatele. Autoři šablon se nyní patrně konečně dočkají v chystaném WordPressu 4.1, který umožní definovat titulek jediným řádkem v souboru functions.php:

add_theme_support( 'title-tag' );

Využita bude funkce add_theme_support(), která už je používána i pro další vlastnosti (pozadí, záhlaví, atd.) a získá tak pouze další parametr. Samozřejmě musí být tento řádek také správně napojen na akci after_setup_theme nebo init, tedy takto:

function separatista_titulek_webu() {
   add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'separatista_titulek_webu' );

Tímto způsobem vlastně řeknete WordPressu, že titulek v šabloně vůbec řešit nechcete (a nebudete) a ať se o něj postará sám (nebo ve spolupráci s pluginy). A WordPress to pak provede prostřednictvím nové funkce _wp_render_title_tag(), která je napojená na akci wp_head a zobrazí titulek podle standardního vzoru výchozích šablon. Takže to, co původně řešila např. šablona Twenty Fourteen pomocí samostatné funkce twentyfourteen_wp_title(), se nově stane součástí samotného WordPressu (a to včetně lokalizace). Pozor je třeba dát ještě na zpětnou kompatibilitu u šablon, které nebudou vyžadovat nejnovější WordPress 4.1, stručný návod najdete zde.

Jednoduchý způsob, který je zpětně kompatibilní, snadno modifikovatelný pomocí odvozené šablony nebo pluginu a autoři šablon už nemusí nadále řešit základní funkčnost titulku, ale stačí jim jeden řádek kódu. Ale hlavní výhodou tohoto nového přístupu je fakt, že bude titulek řešen samotným WordPressem. Titulek je totiž obsah webu (a nikoli vzhled) a měl by být nezávislý na použité šabloně.

Možná se do budoucna v administraci dočkáme i nějakého jednoduchého nastavení převzatého ze SEO pluginů. A jako první šablona, která má tuto tuto funkci implementovanou, bude Twenty Fifteen, takže určitě doporučuji vyzkoušet. Dlouhé články obvykle moc nepíšu, takže doufám, že to čtenářům dalo alespoň nějaký smysl a uvítám případnou zpětnou reakci :-)

Ideální český hosting pro český WordPress CZECHIA

3 thoughts on “WordPress 4.1: Nová funkce pro titulek stránky (title)”

  1. To vypadá fakt dobře. Otevírá to dalši kategorie pro vývojáře pluginů a zejména SEO pluginů. O to víc potom pro tvůrce šablon a i uživatele. Myslím, že WP jde poslední dobu kousek dopředu :)

  2. Zrovna ted jsem to resil ve sve sablone, kterou jsem pouzil uz snad na 10 webu a ted jsem s hruzou zjistil, ze wp_title() ne vzdy funguje uplne idealne. Vetsinou je to teda prepsane SEO pluginem, ale nekde byl vysledek strasny. Takze v nove verzi toto zohlednim:). Diky za pekny clanek

Napsat komentář

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