Autor Zpráva
hellboy80
Profil
Ma tu nekdo zkusenosti s Worpdressem vytvarenim "child themes". Vim, jak v child sablone udelat zmeny v css, ale zajimalo by me, jestli lze skrz child sablonu delat i upravy v php. Pokud ano - jak? Diky za jakoukoliv pomoc :)
smitka
Profil
Standardní soubory hierarchie šablony (developer.wordpress.org/themes/basics/template-hierarchy) stačí jen nakopírovat do složky z child theme. Výjimkou je functions.php, který se nepřepisuje, ale přidává k tomu rodičovskému.

Příklad - chci udělat úpravy v header.php - nakopíruji tedy z rodiče tento soubor do child a upravím.

Další info: codex.wordpress.org/Child_Themes
hellboy80
Profil
Diky. Funguje. Jeste se chci zeptat. Je nejak mozny tam vytvorit i zmeny v php souborech v podadresarich? Upravoval jsem jeden php soubor v podadresarich "inc/widgets". Kdyz v child theme vytvorim adresare "inc/widgets" a prekopuruju do nich ten soubor, tak ty zmeny nevidim. Jak na to?
smitka
Profil
Funguje to jen na soubory té základní hierarchie. Pro podsložky je potřeba najít kde se načítají v těch základních (většinou ve functions.php) často něco podobného:

if ( ! function_exists( 'nacti_ty_soubory' ) ):
  function nacti_ty_soubory() {
    ...
    include(get_template_directory()."/lib/widgets.php");
    ...
 }
endif;

Pak je třeba tu funkci překopírovat do functions.php v child a u souboru, který se má načíst od jinud změnit get_template_directory na get_stylesheet_directory.

Některé šablony to mají vyřešeno jinak, buď to rovnou samy detekují, nebo někde definují konstanty s cestami k jednotlivým souborům, je třeba to prozkoumat.
hellboy80
Profil
Diky. Upravoval jsem tenhle soubor:
/inc/widgets/widget-category-posts-single.php

Ve functions.php puvodni sablony je tenhle radek:
require( get_template_directory() . '/inc/widgets/widget-category-posts-single.php' );

Staci ho tedy prekopirovat? Nebo ho mam vlozit do toho vyse uvedenyho kodu?

if ( ! function_exists( 'nacti_ty_soubory' ) ):
  function nacti_ty_soubory() {
    ...
   inculde( get_template_directory() . '/inc/widgets/widget-category-posts-single.php' );
   ...
 }
endif;


V php jsem amater, proto se tak hloupe ptam :)
Vendy
Profil
smitka:
Příklad - chci udělat úpravy v header.php - nakopíruji tedy z rodiče tento soubor do child a upravím.
Já jsem před časem řešila totéž a přímo z WP Helpdesk mi bylo doporučeno nekopírovat, protože při následných opravách mi zůstanou neopravené části. Fungovat to chvíli bude, ale časem to může dělat problémy.
smitka
Profil
hellboy80:

To require by mělo být součástí nějaké funkce, která by před sebou měla mít test její existence (function_exists), pokud tomu tak není, tak šablona pravděpodobně není plně připravená na používání child themes (může to být ale řešeno i jinak, například přímo v includovaném souboru). Toto bych řešil přímo s tvůrcem šablony, aby ji upravil tak, aby bylo možné v child themes upravovat i tyto soubory (pokud je tvůrce solidní, tak často vyjde vstříc, řešil jsem to takto již několikrát).

Pokud je toto načítání obaleno if ( ! function_exists...) tak by mělo stačit vzít celý tento kód a změnit načítání požadavaného souboru na:
require( get_stylesheet_directory . '/inc/widgets/widget-category-posts-single.php' );



Vendy:
WP Helpdesk neznám, ale tento způsob vytváření je doporučený postup dle oficiálního WordPress Codexu.

V souborech "designu" (například právě header.php, footer.php, ...) je u většiny normálních šablon velmi málo vlastního PHP kódu - většinou se volají funkce z functions.php - a verzi od verze se dobře navržené šablony v těchto souborech prakticky nemění. Toto je i důvod, proč se soubor functions.php nepřepisuje celý, ale pouze doplňuje k původnímu, který se aktualizuje.

Riziko zde samozřejmě při použití nekvalitní šablony je, ale je neporovnatelně menší než provedení úpravy v originálních souborech a následném neaktualizování celé šablony.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: