Občas se nestačím divit, kolik lidí nasadí ve WordPressu šablonu a pokud se jim něco nelíbí tak ji upraví přímo. Jsou-li to úpravy, které nezvládne vestavěný nástroj, tak neváhají sáhnout přímo do zdrojových kódů. Výsledkem může být neaktualizovatelný WordPress (kdyby šablona přestala být kompatibilní).
Pro šablony s některým z vizuálních editorů obvykle neplatí, že nelze udělat všechny úpravy. Ale pro vytvoření odvozené šablony důvod existovat může.
Že by koupená (nebo volně použitelná šablona) 100% vyhovovala, se mi ještě nestalo. Nějaký balík úprav se dělá snad pokaždé a ne na vše stačí vestavěné nástroje pro přizpůsobení. Dostat se k instalaci WordPressu, kde „programátor“ spáchal úpravy přímo v zakoupené, nebo stažené, šabloně je méně vzácné, než by člověk znající WP čekal.
Průšvih nastane, když dojde na aktualizace. Správce bude (možná) ochoten několikrát zopakovat úpravy, ale brzy se nejspíše dostane do stavu, kdy aktualizace šablon přestane provádět; nedlouho poté přestane aktualizovat i WordPress jako takový, protože si šablona s novou verzí CMS nebude rozumět. Rizika jsou jasná, nové verze CMS většinou nepřináší novou funkčnost, ale většina změn jsou bezpečnostní opravy.
Jak vytvořit odvozenou šablonu (child theme)?
Pluginem
Snadnou cestou je použití pluginu (například Child Themify), který část práce udělá za webdesignera. Nepředpokládám, že designer musí být dostatečně zdatný, aby pochopil které soubory musí vytvořit a co do nich napsal, aby odvozená šablona (child theme) fungovala. Mimochodem, občas plugin využiji také, nainstalovat, zaktivovat, několika kliky myši udělat kostru a zase plugin odebrat je rychlé. Po vytvoření child theme není plugin potřebný, lze jej v klidu odebrat.


Ručně
Vytvořit „ručně“ odvozené téma je méně komplikované, než se zdá.
V adresáři wpcontent/themes
vytvořit adresář pro child theme. Aby se dalo ve struktuře lépe vyznat, tak je dobré použít název šablony od níž odvozuje a k němu připojit buď akronym zákazníka anebo slovo child
(twentyfifteen_child, 2014_spdux, …).
Do adresáře přidám 2 soubory, functions.php
a style.css
. Soubor style.css
doplním o podobný blok:
/*
Theme Name: Praha-Lodě
Theme URI: //www.ocalweb.cz
Description: Twenty Thirteen child - prahalode
Author: Marek Olsavsky
Author URI: //www.olsavsky.cz
Template: twentythirteen
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: light, two-columns, responsive-layout, accessibility-ready
Text Domain: praha_lode_template
*/
Na řádku Template
je název šablony od které se nová odvozuje.
Druhý krok je doplnění functions.php
o blok:
<?php
add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
function my_theme_enqueue_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}
?>
Editace šablony
Nyní už lze lze upravovat styly (style.css
), případně měnit jednotlivé bloky.
Například pro úpravy patičky webu zkopíruji footer.php
z mateřského tématu do odvozeného a tam jej upravím podle svých potřeb. (Typicky sem přidávám Google Analytics JavaScript; nepoužívám plugin.)
Závěrem
Odvozená šablona přebírá všechny vlastnosti (ještě jsem se nesetkal s tím, že by to nefungovalo) od svého předka. Včetně všech možností a nástrojů.
Výběr šablon je opravdu pestrý, ale téměř nikdy není důvod nedělat child theme. Child dělám i pro Divi (ostatně tu bych přímo ani neupravoval), někdy je pro mě výhodné přepsat některou z vlastností přímo. Změna fontu, či doplnění vlastního JavaScriptu (například Google Analytics), jsou poměrně typické příklady toho, kdy je práce v child theme jednodušší variantou, ne-li jedinou možností, pro docílení kýženého efektu.
Změny v child theme jsou lépe přenosné a „blbuvzdornější“, než úpravy provedené vizuálními nástroji v administraci WordPressu (které si zákazník může překlikat i nechtěně).
A proč vznikl další příspěvek, který opakuje to co je na internetu napsáno již 1 000×? Protože jsem právě takto ohnutou šablonu napravoval. Zastavené aktualizace, WordPress ve verzi 4.5, protože měli vyzkoušené, že s další aktualizací si už šablona neporadí. Nezbylo, než stáhnout původní verzi šablony, diff
em najít úpravy od „vývojáře“ a vyrobit child theme s úpravami.
Občas by se (mi) hodilo mít podobný mechanismus i pro pluginy. Udělat instanci existujícího (který bude aktualizován) a moci rozšířit jeho funkčnost. Ano je jeden malý workaround, ale není to úplně čisté řešení, protože zablokuje aktualizace pluginu.