{"id":20871,"date":"2026-10-23T19:31:00","date_gmt":"2026-10-23T17:31:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=20871"},"modified":"2026-10-09T22:33:53","modified_gmt":"2026-10-09T20:33:53","slug":"block-theme-theme-json-child-theme","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/","title":{"rendered":"Block Theme z theme.json: Templates, Parts i Child Theme"},"content":{"rendered":"<p>Motyw blokowy (Block Theme) sk\u0142ada si\u0119 przede wszystkim z plik\u00f3w HTML ze znacznikami blok\u00f3w i jednego pliku JSON. \u017beby zrozumie\u0107 jego dzia\u0142anie, trzeba te\u017c wiedzie\u0107, kt\u00f3ry szablon WordPress wybiera dla danego \u017c\u0105dania, dlaczego zmieniony plik czasem nie daje widocznego efektu i co dzieje si\u0119 z ustawieniami motywu nadrz\u0119dnego, gdy motyw potomny (Child Theme) dodaje w\u0142asny plik <code>theme.json<\/code>. Decyduje o tym kilka funkcji w rdzeniu WordPressa.<\/p>\n<p>Artyku\u0142 pokazuje budow\u0119 ma\u0142ego, ale kompletnego motywu blokowego z plikami <code>style.css<\/code> i <code>theme.json<\/code>, jednym szablonem, dwoma cz\u0119\u015bciami szablonu (Template Parts), jednym wzorcem (Pattern) i jedn\u0105 wariacj\u0105 stylu (Style Variation), a nast\u0119pnie motywu potomnego. Na podstawie kodu \u017ar\u00f3d\u0142owego WordPressa 7.1 wyja\u015bnia, gdzie Site Editor zapisuje zmiany, w jakiej kolejno\u015bci wybierane s\u0105 szablony i jak \u0142\u0105cz\u0105 si\u0119 warstwy danych globalnych ustawie\u0144 i styl\u00f3w. Wed\u0142ug API wersji WordPress.org aktualnym wydaniem w dniu 29.09.2026 jest 7.1.2.<\/p>\n<h2>Pliki minimalnego Block Theme<\/h2>\n<p>WordPress uznaje Theme za blokowy, gdy znajdzie czytelny plik <code>templates\/index.html<\/code>. Metoda <code>WP_Theme::is_block_theme()<\/code> sprawdza dok\u0142adnie t\u0119 \u015bcie\u017ck\u0119, a ze wzgl\u0119du na zgodno\u015b\u0107 wstecz tak\u017ce starsz\u0105 <code>block-templates\/index.html<\/code>. Reszta jest technicznie opcjonalna, cho\u0107 bez niej trudno o u\u017cyteczny Theme. Folder przyk\u0142adowego Theme\u2019u wygl\u0105da tak:<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">lw-base\/\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 style.css\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 theme.json\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 templates\/\n<\/span><span class=\"cbb-line\">\u2502   \u2514\u2500\u2500 index.html\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 parts\/\n<\/span><span class=\"cbb-line\">\u2502   \u251c\u2500\u2500 header.html\n<\/span><span class=\"cbb-line\">\u2502   \u2514\u2500\u2500 footer.html\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 patterns\/\n<\/span><span class=\"cbb-line\">\u2502   \u2514\u2500\u2500 footer-credits.php\n<\/span><span class=\"cbb-line\">\u2514\u2500\u2500 styles\/\n<\/span><span class=\"cbb-line\">    \u2514\u2500\u2500 night.json<\/span><\/code><\/pre><\/figure>\n\n\n<p>Plik <code>style.css<\/code> zawiera nag\u0142\u00f3wek Theme\u2019u. W Block Theme nie musi mie\u0107 \u017cadnego CSS, bo wygl\u0105d definiuje <code>theme.json<\/code>. Theme Handbook wymienia jako pola wymagane w katalogu Theme\u2019\u00f3w: Theme Name, Description, Version, Author, Text Domain, Tested up to, Requires at least, Requires PHP, License i License URI. Przyk\u0142ad ustawia <code>Requires at least: 6.6<\/code>, poniewa\u017c korzysta z <code>theme.json<\/code> w wersji 3, wprowadzonej w WordPressie 6.6.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"yaml\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">YAML<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-yaml\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">\/*\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Theme Name<\/span>: LW Base\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Theme URI<\/span>: https:\/\/example.com\/lw-base\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Author<\/span>: Lukas Wojcik\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Author URI<\/span>: https:\/\/lukaswojcik.com\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Description<\/span>: Minimal block theme with templates, template parts, a pattern and a style variation.\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Version<\/span>: 1.0.0\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Requires at least<\/span>: <span class=\"cbb-number\">6.6<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Tested up to<\/span>: <span class=\"cbb-number\">7.1<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Requires PHP<\/span>: <span class=\"cbb-number\">7.4<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">License<\/span>: GNU General Public License v2 or later\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">License URI<\/span>: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n<\/span><span class=\"cbb-line\"><span class=\"cbb-attr\">Text Domain<\/span>: lw-base\n<\/span><span class=\"cbb-line\">*\/<\/span><\/code><\/pre><\/figure>\n\n\n<p>Nazwy folder\u00f3w s\u0105 sta\u0142e: Templates trafiaj\u0105 do <code>templates\/<\/code>, Template Parts do <code>parts\/<\/code>, wzorce do <code>patterns\/<\/code>, a wariacje stylu do <code>styles\/<\/code>. Dawne nazwy <code>block-templates\/<\/code> i <code>block-template-parts\/<\/code> nadal s\u0105 rozpoznawane przez <code>WP_Theme::get_block_template_folders()<\/code>, ale wy\u0142\u0105cznie jako rozwi\u0105zanie awaryjne dla starszych Theme\u2019\u00f3w.<\/p>\n<h2>theme.json: settings, styles i wersja 3<\/h2>\n<p>Plik <code>theme.json<\/code> ma dwie g\u0142\u00f3wne sekcje. <code>settings<\/code> okre\u015bla, co oferuje edytor: palety kolor\u00f3w, rozmiary i rodziny czcionek, szeroko\u015bci uk\u0142adu oraz w\u0142\u0105czone narz\u0119dzia projektowe. <code>styles<\/code> przypisuje konkretne warto\u015bci ca\u0142ej stronie, elementom takim jak linki i nag\u0142\u00f3wki oraz poszczeg\u00f3lnym Blockom. Na najwy\u017cszym poziomie dochodz\u0105 <code>customTemplates<\/code>, <code>templateParts<\/code> i <code>patterns<\/code>; schemat JSON dla 7.1 zawiera ponadto <code>title<\/code>, <code>slug<\/code>, <code>description<\/code> i <code>blockTypes<\/code>, potrzebne przy wariacjach stylu.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"json\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JSON<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-json\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">{\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"$schema\"<\/span>: <span class=\"cbb-string\">\"https:\/\/schemas.wp.org\/wp\/7.1\/theme.json\"<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"version\"<\/span>: <span class=\"cbb-number\">3<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"settings\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"appearanceTools\"<\/span>: <span class=\"cbb-constant\">true<\/span>,\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"layout\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"contentSize\"<\/span>: <span class=\"cbb-string\">\"720px\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"wideSize\"<\/span>: <span class=\"cbb-string\">\"1200px\"<\/span>\n<\/span><span class=\"cbb-line\">\t\t},\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"color\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"defaultPalette\"<\/span>: <span class=\"cbb-constant\">false<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"palette\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"base\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#ffffff\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Base\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"contrast\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#111827\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Contrast\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"accent\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#0369a1\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Accent\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t&#93;\n<\/span><span class=\"cbb-line\">\t\t},\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"typography\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"defaultFontSizes\"<\/span>: <span class=\"cbb-constant\">false<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"fontSizes\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"small\"<\/span>, <span class=\"cbb-attr\">\"size\"<\/span>: <span class=\"cbb-string\">\"0.875rem\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Small\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"medium\"<\/span>, <span class=\"cbb-attr\">\"size\"<\/span>: <span class=\"cbb-string\">\"1rem\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Medium\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"large\"<\/span>, <span class=\"cbb-attr\">\"size\"<\/span>: <span class=\"cbb-string\">\"1.5rem\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Large\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t&#93;,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"fontFamilies\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t\t\t{\n<\/span><span class=\"cbb-line\">\t\t\t\t\t<span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"system\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t\t\t<span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"System\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t\t\t<span class=\"cbb-attr\">\"fontFamily\"<\/span>: <span class=\"cbb-string\">\"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, sans-serif\"<\/span>\n<\/span><span class=\"cbb-line\">\t\t\t\t}\n<\/span><span class=\"cbb-line\">\t\t\t&#93;\n<\/span><span class=\"cbb-line\">\t\t}\n<\/span><span class=\"cbb-line\">\t},\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"styles\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"color\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"background\"<\/span>: <span class=\"cbb-string\">\"var(--wp--preset--color--base)\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"text\"<\/span>: <span class=\"cbb-string\">\"var(--wp--preset--color--contrast)\"<\/span>\n<\/span><span class=\"cbb-line\">\t\t},\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"typography\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"fontFamily\"<\/span>: <span class=\"cbb-string\">\"var(--wp--preset--font-family--system)\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"fontSize\"<\/span>: <span class=\"cbb-string\">\"var(--wp--preset--font-size--medium)\"<\/span>,\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"lineHeight\"<\/span>: <span class=\"cbb-string\">\"1.6\"<\/span>\n<\/span><span class=\"cbb-line\">\t\t},\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"spacing\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"padding\"<\/span>: { <span class=\"cbb-attr\">\"top\"<\/span>: <span class=\"cbb-string\">\"1.5rem\"<\/span>, <span class=\"cbb-attr\">\"right\"<\/span>: <span class=\"cbb-string\">\"1.5rem\"<\/span>, <span class=\"cbb-attr\">\"bottom\"<\/span>: <span class=\"cbb-string\">\"1.5rem\"<\/span>, <span class=\"cbb-attr\">\"left\"<\/span>: <span class=\"cbb-string\">\"1.5rem\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t},\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"elements\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"link\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t\t<span class=\"cbb-attr\">\"color\"<\/span>: { <span class=\"cbb-attr\">\"text\"<\/span>: <span class=\"cbb-string\">\"var(--wp--preset--color--accent)\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t}\n<\/span><span class=\"cbb-line\">\t\t}\n<\/span><span class=\"cbb-line\">\t},\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"templateParts\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t{ <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"header\"<\/span>, <span class=\"cbb-attr\">\"title\"<\/span>: <span class=\"cbb-string\">\"Header\"<\/span>, <span class=\"cbb-attr\">\"area\"<\/span>: <span class=\"cbb-string\">\"header\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t{ <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"footer\"<\/span>, <span class=\"cbb-attr\">\"title\"<\/span>: <span class=\"cbb-string\">\"Footer\"<\/span>, <span class=\"cbb-attr\">\"area\"<\/span>: <span class=\"cbb-string\">\"footer\"<\/span> }\n<\/span><span class=\"cbb-line\">\t&#93;\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n\n\n<p>Numer wersji ma znaczenie. Dokumentacja referencyjna theme.json na developer.wordpress.org opisuje wersj\u0119 3, a wed\u0142ug Block Editor Handbook wprowadzono j\u0105 w WordPressie 6.6. W kodzie 7.1 sta\u0142a <code>WP_Theme_JSON::LATEST_SCHEMA<\/code> r\u00f3wnie\u017c ma warto\u015b\u0107 3. Dev note na make.wordpress.org opisuje jedyn\u0105 zmian\u0119 \u0142ami\u0105c\u0105 zgodno\u015b\u0107: od wersji 3 Theme nie zast\u0119puje ju\u017c po cichu domy\u015blnych rozmiar\u00f3w czcionek ani odst\u0119p\u00f3w, gdy u\u017cyje ich slug\u00f3w. Kto chce przypisa\u0107 w\u0142asne warto\u015bci slugom <code>small<\/code>, <code>medium<\/code> i <code>large<\/code>, musi ustawi\u0107 <code>defaultFontSizes<\/code> (lub <code>defaultSpacingSizes<\/code>) na <code>false<\/code>, tak jak w przyk\u0142adzie. Starsze wersje wed\u0142ug Block Editor Handbook nadal s\u0105 obs\u0142ugiwane.<\/p>\n<p>Klucz <code>$schema<\/code> wyst\u0119puje w dw\u00f3ch wariantach: <code>https:\/\/schemas.wp.org\/trunk\/theme.json<\/code> pod\u0105\u017ca za rozwojem, a <code>https:\/\/schemas.wp.org\/wp\/7.1\/theme.json<\/code> jest przypisany do konkretnego wydania. Funkcja eksportu w rdzeniu zapisuje form\u0119 z numerem wersji i ta forma jest te\u017c bezpieczniejsza dla podpowiedzi w edytorze kodu, bo schemat z ga\u0142\u0119zi trunk mo\u017ce ju\u017c opisywa\u0107 w\u0142a\u015bciwo\u015bci, kt\u00f3rych zainstalowane wydanie nie zna. Wszystkie trzy pliki JSON z tego artyku\u0142u zosta\u0142y zwalidowane wzgl\u0119dem schematu dla 7.1.<\/p>\n<p>Tablica <code>templateParts<\/code> nadaje ka\u017cdemu plikowi w <code>parts\/<\/code> tytu\u0142 i obszar (area). Rdze\u0144 definiuje obszary <code>header<\/code>, <code>footer<\/code> i <code>uncategorized<\/code>; od wersji 7.0 kod \u017ar\u00f3d\u0142owy zawiera tak\u017ce <code>navigation-overlay<\/code>. Obszar decyduje, gdzie Site Editor pokazuje dany Part i jaki element HTML go otacza, je\u015bli nie ustawiono <code>tagName<\/code>.<\/p>\n<h2>Templates, Template Parts i wzorzec<\/h2>\n<p>Template to plik HTML z zserializowanymi Blockami. Poni\u017cszy <code>index.html<\/code> osadza nag\u0142\u00f3wek i stopk\u0119, otacza tre\u015b\u0107 elementem <code>main<\/code> i u\u017cywa Blocku Query Loop z <code>\"inherit\":true<\/code>. Dzi\u0119ki temu pokazuje to, co zwraca g\u0142\u00f3wne zapytanie danego \u017c\u0105dania: list\u0119 wpis\u00f3w bloga, archiwum albo wyniki wyszukiwania.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">&lt;!-- wp:template-part {\"slug\":\"header\",\"tagName\":\"header\"} \/--&gt;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">&lt;!-- wp:group {\"tagName\":\"main\",\"layout\":{\"type\":\"constrained\"}} --&gt;\n<\/span><span class=\"cbb-line\">&lt;main class=\"wp-block-group\"&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:query {\"queryId\":1,\"query\":{\"perPage\":10,\"pages\":0,\"offset\":0,\"postType\":\"post\",\"order\":\"desc\",\"orderBy\":\"date\",\"inherit\":true}} --&gt;\n<\/span><span class=\"cbb-line\">\t&lt;div class=\"wp-block-query\"&gt;\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- wp:post-template --&gt;\n<\/span><span class=\"cbb-line\">\t\t\t&lt;!-- wp:post-title {\"isLink\":true} \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t\t&lt;!-- wp:post-excerpt \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- \/wp:post-template --&gt;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- wp:query-pagination --&gt;\n<\/span><span class=\"cbb-line\">\t\t\t&lt;!-- wp:query-pagination-previous \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t\t&lt;!-- wp:query-pagination-numbers \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t\t&lt;!-- wp:query-pagination-next \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- \/wp:query-pagination --&gt;\n<\/span><span class=\"cbb-line\">\t&lt;\/div&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- \/wp:query --&gt;\n<\/span><span class=\"cbb-line\">&lt;\/main&gt;\n<\/span><span class=\"cbb-line\">&lt;!-- \/wp:group --&gt;\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\">&lt;!-- wp:template-part {\"slug\":\"footer\",\"tagName\":\"footer\"} \/--&gt;<\/span><\/code><\/pre><\/figure>\n\n\n<p>Template Parts s\u0105 wstawiane przez slug. Atrybut <code>theme<\/code> celowo pomini\u0119to. Funkcja renderuj\u0105ca Blocku Template Part bez tego atrybutu si\u0119ga po <code>get_stylesheet()<\/code>, czyli aktywny Theme. Gdyby Theme nadrz\u0119dny wpisa\u0142 tam na sztywno w\u0142asny slug, przy aktywnym Child Theme zapytanie przesta\u0142oby pasowa\u0107, a Part zosta\u0142by wyrenderowany jako pusty ci\u0105g znak\u00f3w. Dopiero brak atrybutu pozwala Child Theme zast\u0105pi\u0107 dany Part.<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">&lt;!-- wp:group {\"layout\":{\"type\":\"flex\",\"justifyContent\":\"space-between\"}} --&gt;\n<\/span><span class=\"cbb-line\">&lt;div class=\"wp-block-group\"&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:site-title \/--&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:navigation \/--&gt;\n<\/span><span class=\"cbb-line\">&lt;\/div&gt;\n<\/span><span class=\"cbb-line\">&lt;!-- \/wp:group --&gt;<\/span><\/code><\/pre><\/figure>\n\n\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">&lt;!-- wp:group {\"layout\":{\"type\":\"constrained\"}} --&gt;\n<\/span><span class=\"cbb-line\">&lt;div class=\"wp-block-group\"&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:pattern {\"slug\":\"lw-base\/footer-credits\"} \/--&gt;\n<\/span><span class=\"cbb-line\">&lt;\/div&gt;\n<\/span><span class=\"cbb-line\">&lt;!-- \/wp:group --&gt;<\/span><\/code><\/pre><\/figure>\n\n\n<p>Stopka nie zawiera w\u0142asnego tekstu, tylko \u0142aduje wzorzec. Pliki wzorc\u00f3w w <code>patterns\/<\/code> WordPress rejestruje automatycznie na <code>init<\/code>, o ile nag\u0142\u00f3wek pliku zawiera co najmniej <code>Title<\/code> i <code>Slug<\/code>; pliki bez tych p\u00f3l rdze\u0144 odrzuca komunikatem <code>_doing_it_wrong()<\/code>. Poniewa\u017c plik jest w PHP, teksty da si\u0119 t\u0142umaczy\u0107 z u\u017cyciem Text Domain Theme\u2019u, czego czysty szablon HTML nie umo\u017cliwia.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"php\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">PHP<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-php\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-meta\">&lt;?php<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\">\/**<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * Title: Footer credits<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * Slug: lw-base\/footer-credits<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * Categories: footer<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * Block Types: core\/template-part\/footer<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * Description: Short credit line for the site footer.<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> *<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> * @package lw-base<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"> *\/<\/span>\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-meta\">?&gt;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\">&lt;!-- wp:paragraph {\"fontSize\":\"small\"} --&gt;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-punct\">&lt;<\/span><span class=\"cbb-tag\">p<\/span> <span class=\"cbb-attr\">class<\/span><span class=\"cbb-punct\">=<\/span><span class=\"cbb-string\">\"has-small-font-size\"<\/span><span class=\"cbb-punct\">&gt;<\/span><span class=\"cbb-meta\">&lt;?php<\/span> <span class=\"cbb-function\">esc_html_e<\/span>( <span class=\"cbb-string\">'Published with a block theme.'<\/span>, <span class=\"cbb-string\">'lw-base'<\/span> ); <span class=\"cbb-meta\">?&gt;<\/span><span class=\"cbb-punct\">&lt;\/<\/span><span class=\"cbb-tag\">p<\/span><span class=\"cbb-punct\">&gt;<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\">&lt;!-- \/wp:paragraph --&gt;<\/span><\/span><\/code><\/pre><\/figure>\n\n\n<p>Wariacja stylu to niepe\u0142ny plik <code>theme.json<\/code> w folderze <code>styles\/<\/code>, zawieraj\u0105cy tylko r\u00f3\u017cnice wzgl\u0119dem pliku g\u0142\u00f3wnego. Gdy kto\u015b wybierze j\u0105 w Site Editorze, jej dane wed\u0142ug Theme Handbook trafiaj\u0105 do bazy danych jako dostosowanie u\u017cytkownika. P\u00f3\u017aniejsze zmiany w pliku wariacji nie docieraj\u0105 wi\u0119c do witryn, kt\u00f3re ju\u017c j\u0105 zapisa\u0142y.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"json\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JSON<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-json\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">{\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"$schema\"<\/span>: <span class=\"cbb-string\">\"https:\/\/schemas.wp.org\/wp\/7.1\/theme.json\"<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"version\"<\/span>: <span class=\"cbb-number\">3<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"title\"<\/span>: <span class=\"cbb-string\">\"Night\"<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"settings\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"color\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"palette\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"base\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#0a0e14\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Base\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"contrast\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#e5e7eb\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Contrast\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"accent\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#38bdf8\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Accent\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t&#93;\n<\/span><span class=\"cbb-line\">\t\t}\n<\/span><span class=\"cbb-line\">\t}\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n\n\n<h2>Co Site Editor zapisuje w bazie danych<\/h2>\n<p>Dop\u00f3ki nikt niczego nie zmienia, WordPress czyta pliki Theme\u2019u bezpo\u015brednio. Gdy Template zostanie zapisany w Site Editorze, rdze\u0144 przechowuje pe\u0142ny markup Block\u00f3w jako wpis. Bior\u0105 w tym udzia\u0142 trzy typy wpis\u00f3w: <code>wp_template<\/code> dla Templates, <code>wp_template_part<\/code> dla Template Parts oraz <code>wp_global_styles<\/code> dla zmian w stylach globalnych, \u0142\u0105cznie z wybran\u0105 wariacj\u0105 stylu. Pole <code>post_name<\/code> wpisu z Template to jego slug, na przyk\u0142ad <code>index<\/code> lub <code>single<\/code>.<\/p>\n<p>Taksonomia <code>wp_theme<\/code> przypisuje te wpisy do motywu. Jej termem jest stylesheet, czyli nazwa folderu aktywnego motywu. Przy aktywnym motywie potomnym liczy si\u0119 jego folder, a nie folder motywu nadrz\u0119dnego. <code>get_block_templates()<\/code> pobiera wy\u0142\u0105cznie wpisy, kt\u00f3rych term odpowiada <code>get_stylesheet()<\/code>. Cz\u0119\u015bci szablonu maj\u0105 dodatkowo term taksonomii <code>wp_template_part_area<\/code>. Wewn\u0119trznie ka\u017cdy szablon ma identyfikator w postaci <code>stylesheet\/\/slug<\/code>, na przyk\u0142ad <code>lw-child\/\/index<\/code>.<\/p>\n<p>Wniosek jest prosty: zapisany Template wygrywa z plikiem o tym samym slugu. <code>get_block_templates()<\/code> najpierw pobiera wyniki z bazy, a ich slugi przekazuje jako <code>slug__not_in<\/code> do wyszukiwania plik\u00f3w, wi\u0119c plik Theme\u2019u w og\u00f3le nie jest ju\u017c brany pod uwag\u0119. Je\u015bli aktualizacja Theme\u2019u zmieni p\u00f3\u017aniej <code>templates\/index.html<\/code>, zmiana pozostanie niewidoczna, dop\u00f3ki dostosowanie nie zostanie usuni\u0119te. Kontroler REST dla Templates pozwala usuwa\u0107 tylko Templates o \u017ar\u00f3dle <code>custom<\/code>; w przypadku Template opartego na pliku Theme\u2019u usuni\u0119cie wpisu przywraca wersj\u0119 z pliku. List\u0119 dostosowa\u0144 na danej witrynie da si\u0119 uzyska\u0107 przez WP-CLI:<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"bash\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Shell<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-bash\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-comment\"># Which templates, template parts and global styles live in the database?<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">wp<\/span> post list <span class=\"cbb-attr\">--post_type<\/span>=wp_template,wp_template_part,wp_global_styles <span class=\"cbb-attr\">--post_status<\/span>=any <span class=\"cbb-attr\">--fields<\/span>=ID,post_type,post_name,post_modified\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-comment\"># Which theme (stylesheet) does a customization belong to? 123 = an ID from the list above.<\/span>\n<\/span><span class=\"cbb-line\"><span class=\"cbb-function\">wp<\/span> post term list <span class=\"cbb-number\">123<\/span> wp_theme <span class=\"cbb-attr\">--fields<\/span>=name<\/span><\/code><\/pre><\/figure>\n\n\n<p>Poniewa\u017c zapytanie filtruje po termie stylesheet, zmiana Theme\u2019u nie usuwa tych wpis\u00f3w, a jedynie wy\u0142\u0105cza ich dzia\u0142anie: zostaj\u0105 w bazie pod starym termem i znowu obowi\u0105zuj\u0105, gdy ten Theme zostanie ponownie w\u0142\u0105czony. Eksport z Site Editora, zaimplementowany w <code>wp_generate_block_templates_export_file()<\/code>, tworzy archiwum ZIP z plikami Theme\u2019u, aktualnymi Templates i Parts oraz plikiem <code>theme.json<\/code>, w kt\u00f3rym dane Theme\u2019u po\u0142\u0105czono z danymi u\u017cytkownika.<\/p>\n<h2>Rozwi\u0105zywanie Template: baza danych, Child, Parent, fallback<\/h2>\n<p>Hierarchia szablon\u00f3w w Block Theme jest taka sama jak w klasycznych Theme\u2019ach; Theme Handbook zaznacza jedynie, \u017ce pliki HTML zast\u0119puj\u0105 pliki PHP. Dla pojedynczego wpisu WordPress tworzy list\u0119 kandydat\u00f3w, na przyk\u0142ad <code>single-post-witaj-swiecie<\/code>, <code>single-post<\/code>, <code>single<\/code>, <code>singular<\/code> i <code>index<\/code>. <code>locate_block_template()<\/code> przekazuje t\u0119 list\u0119 do <code>resolve_block_template()<\/code>, kt\u00f3re wywo\u0142uje <code>get_block_templates()<\/code> dla wszystkich kandydat\u00f3w, a potem sortuje wyniki wed\u0142ug pozycji w hierarchii.<\/p>\n<p>Dla ka\u017cdego slugu obowi\u0105zuje sta\u0142a kolejno\u015b\u0107 \u017ar\u00f3de\u0142. Najpierw liczy si\u0119 wpis <code>wp_template<\/code> dla aktywnego stylesheet. Nast\u0119pnie <code>_get_block_templates_files()<\/code> czyta folder <code>templates\/<\/code> Child Theme przed folderem Theme\u2019u nadrz\u0119dnego; slug znaleziony w Child jest w Parent pomijany. Dalej s\u0105 Templates, kt\u00f3re wtyczki rejestruj\u0105 od WordPressa 6.7 funkcj\u0105 <code>register_block_template()<\/code>, ale tylko wtedy, gdy nie istnieje plik Theme\u2019u o tym samym slugu. Sam WordPress nie dostarcza \u017cadnych szablon\u00f3w HTML dla Theme\u2019\u00f3w, wi\u0119c w\u0142a\u015bciwym fallbackiem rdzenia jest kolejny, mniej szczeg\u00f3\u0142owy slug w hierarchii, a\u017c do <code>index.html<\/code>.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/wp-block-theme-pl.png?v=20260930\" width=\"1120\" height=\"580\" alt=\"Rozwi\u0105zywanie Template w Block Theme: dla ka\u017cdego slugu od single-post-{slug} do index WordPress sprawdza kolejno baz\u0119 danych, Child Theme, Theme nadrz\u0119dny i rejestr wtyczek; template-canvas.php wy\u015bwietla pierwsze trafienie, index.html to ostatni fallback, a Template Parts maj\u0105 t\u0119 sam\u0105 kolejno\u015b\u0107\">\n<figcaption>Dla ka\u017cdego slugu: baza danych przed Child Theme, przed Theme nadrz\u0119dnym i rejestrem wtyczek; brak trafienia oznacza kolejny slug<\/figcaption>\n<\/figure>\n<p>Najbardziej szczeg\u00f3\u0142owy slug zawsze wygrywa, niezale\u017cnie od \u017ar\u00f3d\u0142a. Plik <code>single.html<\/code> w Theme nadrz\u0119dnym ma wi\u0119c pierwsze\u0144stwo przed <code>index.html<\/code> zmienionym w Site Editorze, bo <code>single<\/code> stoi w hierarchii przed <code>index<\/code>. Kolejno\u015b\u0107 \u017ar\u00f3de\u0142 rozstrzyga wy\u0142\u0105cznie mi\u0119dzy wpisami o tym samym slugu. Template Parts dzia\u0142aj\u0105 wed\u0142ug tego samego wzorca: funkcja renderuj\u0105ca Blocku Template Part szuka najpierw wpisu <code>wp_template_part<\/code>, a potem wywo\u0142uje <code>get_block_file_template()<\/code>, kt\u00f3re przez <code>_get_block_template_file()<\/code> przeszukuje najpierw katalog stylesheet, a potem katalog template.<\/p>\n<p>Znaleziony markup Block\u00f3w jest wy\u015bwietlany przez <code>wp-includes\/template-canvas.php<\/code>. Je\u015bli zapisany Template jest pusty, zalogowani u\u017cytkownicy od wersji 6.8 widz\u0105 komunikat z linkiem do Site Editora; odwiedzaj\u0105cy dostaj\u0105 zamiast tego tre\u015b\u0107 pliku Theme\u2019u, o ile taki plik istnieje.<\/p>\n<h2>Child Theme dla Block Theme<\/h2>\n<p>Child Theme bezwzgl\u0119dnie potrzebuje tylko pliku <code>style.css<\/code> z nag\u0142\u00f3wkiem <code>Template<\/code>. Wed\u0142ug Theme Handbook jego warto\u015b\u0107 musi dok\u0142adnie odpowiada\u0107 nazwie folderu Theme\u2019u nadrz\u0119dnego. Przyk\u0142adowy Child Theme wnosi dodatkowo w\u0142asn\u0105 palet\u0119 i zmieniony nag\u0142\u00f3wek.<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">lw-child\/\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 style.css\n<\/span><span class=\"cbb-line\">\u251c\u2500\u2500 theme.json\n<\/span><span class=\"cbb-line\">\u2514\u2500\u2500 parts\/\n<\/span><span class=\"cbb-line\">    \u2514\u2500\u2500 header.html<\/span><\/code><\/pre><\/figure>\n\n\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">\/*\n<\/span><span class=\"cbb-line\">Theme Name: LW Child\n<\/span><span class=\"cbb-line\">Template: lw-base\n<\/span><span class=\"cbb-line\">Description: Child theme of LW Base with its own palette and header.\n<\/span><span class=\"cbb-line\">Version: 1.0.0\n<\/span><span class=\"cbb-line\">Requires at least: 6.6\n<\/span><span class=\"cbb-line\">Tested up to: 7.1\n<\/span><span class=\"cbb-line\">Requires PHP: 7.4\n<\/span><span class=\"cbb-line\">License: GNU General Public License v2 or later\n<\/span><span class=\"cbb-line\">License URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n<\/span><span class=\"cbb-line\">Text Domain: lw-child\n<\/span><span class=\"cbb-line\">*\/<\/span><\/code><\/pre><\/figure>\n\n\n<p>W\u0142asny plik <code>templates\/index.html<\/code> w Child Theme nie jest potrzebny. <code>WP_Theme::get_file_path()<\/code> szuka najpierw w katalogu stylesheet, a potem w katalogu template, dlatego <code>is_block_theme()<\/code> znajduje plik Theme\u2019u nadrz\u0119dnego i r\u00f3wnie\u017c Child Theme traktuje jako blokowy. Wszystko, czego brakuje w Child, pochodzi z Parent: Templates, Template Parts, wzorce i wariacje stylu.<\/p>\n<p>Nadpisywanie dzia\u0142a element po elemencie. Plik o tej samej nazwie w <code>templates\/<\/code> lub <code>parts\/<\/code> zast\u0119puje wersj\u0119 z Theme\u2019u nadrz\u0119dnego. W przypadku wzorc\u00f3w funkcja <code>_register_theme_block_patterns()<\/code> nie patrzy na nazw\u0119 pliku, tylko na <code>Slug<\/code> w nag\u0142\u00f3wku: wzorce Child Theme s\u0105 rejestrowane jako pierwsze, a wzorzec z Parent o zaj\u0119tym ju\u017c slugu zostaje pomini\u0119ty. Przy wariacjach stylu <code>get_style_variations()<\/code> por\u00f3wnuje nazwy plik\u00f3w w obu folderach <code>styles\/<\/code> i przy zgodno\u015bci zachowuje tylko plik z Child. Zast\u0105piony nag\u0142\u00f3wek w Child Theme wygl\u0105da tak:<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"plain\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Text<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-plain\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">&lt;!-- wp:group {\"layout\":{\"type\":\"flex\",\"justifyContent\":\"space-between\"}} --&gt;\n<\/span><span class=\"cbb-line\">&lt;div class=\"wp-block-group\"&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:group {\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\"}} --&gt;\n<\/span><span class=\"cbb-line\">\t&lt;div class=\"wp-block-group\"&gt;\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- wp:site-title \/--&gt;\n<\/span><span class=\"cbb-line\">\t\t&lt;!-- wp:site-tagline \/--&gt;\n<\/span><span class=\"cbb-line\">\t&lt;\/div&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- \/wp:group --&gt;\n<\/span><span class=\"cbb-line\">\t&lt;!-- wp:navigation \/--&gt;\n<\/span><span class=\"cbb-line\">&lt;\/div&gt;\n<\/span><span class=\"cbb-line\">&lt;!-- \/wp:group --&gt;<\/span><\/code><\/pre><\/figure>\n\n\n<p>Z termu stylesheet wynika jeszcze jeden praktyczny szczeg\u00f3\u0142. Dostosowania wykonane w Site Editorze przy aktywnym Theme nadrz\u0119dnym nale\u017c\u0105 do jego stylesheet. Po prze\u0142\u0105czeniu na Child Theme przestaj\u0105 obowi\u0105zywa\u0107, a Child startuje od plik\u00f3w.<\/p>\n<h2>Jak \u0142\u0105czone s\u0105 pliki theme.json z Parent i Child<\/h2>\n<p>Globalne ustawienia i style pochodz\u0105 z czterech \u017ar\u00f3de\u0142, kt\u00f3re <code>WP_Theme_JSON_Resolver::get_merged_data()<\/code> \u0142\u0105czy w sta\u0142ej kolejno\u015bci: <code>default<\/code> (w\u0142asny <code>theme.json<\/code> rdzenia), <code>blocks<\/code> (dane z rejestracji Block\u00f3w), <code>theme<\/code> oraz <code>custom<\/code> (dane u\u017cytkownika z wpisu <code>wp_global_styles<\/code>). Ka\u017cda kolejna warstwa nadpisuje wcze\u015bniejsze. Dokumentacja w kodzie podaje przyk\u0142ad koloru t\u0142a dla Blocku akapitu ustawionego zar\u00f3wno przez Theme, jak i przez u\u017cytkownika: wygrywa ustawienie u\u017cytkownika.<\/p>\n<p>Warstwa <code>theme<\/code> sama sk\u0142ada si\u0119 z kilku cz\u0119\u015bci. <code>get_theme_data()<\/code> najpierw czyta <code>theme.json<\/code> aktywnego Theme\u2019u, czyli Child. Je\u015bli istnieje Theme nadrz\u0119dny z innym plikiem <code>theme.json<\/code>, resolver tworzy z pliku Parent obiekt <code>WP_Theme_JSON<\/code> i scala do niego dane Child; wed\u0142ug komentarza w kodzie pierwsze\u0144stwo ma Child. Na koniec wynik jest nak\u0142adany na warto\u015bci z <code>add_theme_support()<\/code>, wi\u0119c <code>theme.json<\/code> wygrywa z Theme Supports.<\/p>\n\n\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"json\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JSON<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-json\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">{\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"$schema\"<\/span>: <span class=\"cbb-string\">\"https:\/\/schemas.wp.org\/wp\/7.1\/theme.json\"<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"version\"<\/span>: <span class=\"cbb-number\">3<\/span>,\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"settings\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"color\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"palette\"<\/span>: &#91;\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"base\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#f4f6f9\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Base\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"contrast\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#111827\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Contrast\"<\/span> },\n<\/span><span class=\"cbb-line\">\t\t\t\t{ <span class=\"cbb-attr\">\"slug\"<\/span>: <span class=\"cbb-string\">\"accent\"<\/span>, <span class=\"cbb-attr\">\"color\"<\/span>: <span class=\"cbb-string\">\"#c2410c\"<\/span>, <span class=\"cbb-attr\">\"name\"<\/span>: <span class=\"cbb-string\">\"Accent\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t&#93;\n<\/span><span class=\"cbb-line\">\t\t}\n<\/span><span class=\"cbb-line\">\t},\n<\/span><span class=\"cbb-line\">\t<span class=\"cbb-attr\">\"styles\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t<span class=\"cbb-attr\">\"elements\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t<span class=\"cbb-attr\">\"heading\"<\/span>: {\n<\/span><span class=\"cbb-line\">\t\t\t\t<span class=\"cbb-attr\">\"typography\"<\/span>: { <span class=\"cbb-attr\">\"fontWeight\"<\/span>: <span class=\"cbb-string\">\"700\"<\/span> }\n<\/span><span class=\"cbb-line\">\t\t\t}\n<\/span><span class=\"cbb-line\">\t\t}\n<\/span><span class=\"cbb-line\">\t}\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n\n\n<p>Samo scalanie, czyli <code>WP_Theme_JSON::merge()<\/code>, korzysta z <code>array_replace_recursive()<\/code>, wi\u0119c zagnie\u017cd\u017cone obiekty s\u0105 \u0142\u0105czone klucz po kluczu. W przyk\u0142adzie uk\u0142ad, typografia i kolor link\u00f3w z motywu nadrz\u0119dnego pozostaj\u0105 bez zmian, a motyw potomny dodaje grubo\u015b\u0107 czcionki nag\u0142\u00f3wk\u00f3w.<\/p>\n<p>Wyj\u0105tkiem s\u0105 presety: palety, gradienty, filtry duotone, rozmiary i rodziny czcionek oraz pozosta\u0142e listy preset\u00f3w, na przyk\u0142ad rozmiary odst\u0119p\u00f3w i cienie. Ka\u017cda z tych list jest zast\u0119powana w ca\u0142o\u015bci. Paleta motywu potomnego zast\u0119puje wi\u0119c palet\u0119 motywu nadrz\u0119dnego, zamiast j\u0105 rozszerza\u0107.<\/p>\n<p>Dlatego motyw potomny powtarza wszystkie trzy slugi. Gdyby poda\u0142 wy\u0142\u0105cznie <code>accent<\/code>, zabrak\u0142oby <code>base<\/code> i <code>contrast<\/code>, a ka\u017cdy styl odwo\u0142uj\u0105cy si\u0119 do nich straci\u0142by warto\u015b\u0107. Obowi\u0105zuj\u0105c\u0105 palet\u0119 motywu warto sprawdzi\u0107 na instalacji testowej:<\/p>\n\n\n<figure style=\"--cbb-digits:1\" class=\"cbb cbb--wrap wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\">wp eval <span class=\"cbb-string\">'echo wp_json_encode( wp_get_global_settings( array( \"color\", \"palette\", \"theme\" ), array( \"origin\" =&gt; \"base\" ) ), JSON_PRETTY_PRINT );'<\/span><\/span><\/code><\/pre><\/figure>\n\n\n<p>Opcja <code>\"origin\" =&gt; \"base\"<\/code> pomija warstw\u0119 u\u017cytkownika, wi\u0119c wynik pokazuje wy\u0142\u0105cznie po\u0142\u0105czone dane Parent i Child.<\/p>\n<h2>Ograniczenia i otwarte kwestie<\/h2>\n<ul>\n<li>Filtr <code>wp_theme_json_data_theme<\/code> otrzymuje dane Child, zanim zostanie do nich do\u0142\u0105czony plik Parent. Callback, kt\u00f3ry oczekuje kompletnych danych Theme\u2019u, przy aktywnym Child Theme widzi tylko cz\u0119\u015b\u0107 pochodz\u0105c\u0105 z Child.<\/li>\n<li>Rozwi\u0105zania mieszane z szablonami PHP podlegaj\u0105 dodatkowym regu\u0142om. Gdy <code>locate_template()<\/code> znajdzie plik PHP, w gr\u0119 wchodz\u0105 tylko Templates blokowe o tej samej lub wy\u017cszej szczeg\u00f3\u0142owo\u015bci, a szablon PHP w Child mo\u017ce mie\u0107 pierwsze\u0144stwo przed Template blokowym o tym samym slugu w Parent.<\/li>\n<li>Theme Handbook opisuje nadpisywanie wzorc\u00f3w w Child Theme plikiem o tej samej nazwie, natomiast kod 7.1 por\u00f3wnuje slugi. Artyku\u0142 opiera si\u0119 na kodzie \u017ar\u00f3d\u0142owym.<\/li>\n<li>Niekt\u00f3re strony Handbooka w przyk\u0142adach nadal pokazuj\u0105 <code>\"version\": 2<\/code>, cho\u0107 dokumentacja referencyjna opisuje wersj\u0119 3.<\/li>\n<li>Przyk\u0142ady przetestowano 30.09.2026 w WordPressie 7.1.2: oba motywy aktywuj\u0105 si\u0119 bez komunikat\u00f3w, Child Theme bez w\u0142asnego <code>index.html<\/code> jest rozpoznawany jako Block Theme, znaczniki blok\u00f3w przechodz\u0105 walidacj\u0119 w Site Editorze, a pierwsze\u0144stwo szablon\u00f3w, skutki zmiany motywu i zast\u0119powanie palety dzia\u0142aj\u0105 zgodnie z opisem. Pokrewny temat porusza <a href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/wordpress-7-1-2-poprawka-bezpieczenstwa-szablony\/\">artyku\u0142 o luce bezpiecze\u0144stwa w szablonach stron, za\u0142atanej w WordPressie 7.1.2<\/a>.<\/li>\n<\/ul>\n\n<div class=\"lw-faq\">\n<h2>Pytania i odpowiedzi<\/h2>\n\n<h3>Czy Child Theme dla Block Theme potrzebuje w\u0142asnego pliku templates\/index.html?<\/h3>\n<p>Nie. <code>WP_Theme::is_block_theme()<\/code> szuka pliku przez <code>get_file_path()<\/code>, a ta metoda sprawdza najpierw katalog stylesheet, a potem katalog template. Plik <code>index.html<\/code> z Theme\u2019u nadrz\u0119dnego wystarcza, by r\u00f3wnie\u017c Child Theme by\u0142 traktowany jako blokowy. W\u0142asny plik jest potrzebny tylko wtedy, gdy Child faktycznie zmienia ten Template.<\/p>\n\n<h3>Dlaczego zmieniony plik Template nie dzia\u0142a po aktualizacji Theme\u2019u?<\/h3>\n<p>Zwykle dla tego samego slugu istnieje dostosowanie z Site Editora. Jest zapisane w bazie jako wpis typu <code>wp_template<\/code> (lub <code>wp_template_part<\/code>) i ma pierwsze\u0144stwo, wi\u0119c plik w og\u00f3le nie jest czytany. Takie wpisy pokazuje <code>wp post list --post_type=wp_template,wp_template_part<\/code>. Dopiero po usuni\u0119ciu dostosowania znowu obowi\u0105zuje wersja z pliku.<\/p>\n\n<h3>Czy paleta kolor\u00f3w Child Theme rozszerza palet\u0119 Theme\u2019u nadrz\u0119dnego?<\/h3>\n<p>Nie, zast\u0119puje j\u0105. <code>WP_Theme_JSON::merge()<\/code> \u0142\u0105czy zagnie\u017cd\u017cone obiekty klucz po kluczu, ale presety, takie jak palety, gradienty, rozmiary i rodziny czcionek, s\u0105 przejmowane jako ca\u0142a lista. Child musi wi\u0119c wymieni\u0107 wszystkie kolory, kt\u00f3re maj\u0105 pozosta\u0107 dost\u0119pne, tak\u017ce te niezmienione.<\/p>\n<\/div>\n\n<div class=\"lw-quellen\">\n<h2>\u0179r\u00f3d\u0142a<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/templates\/introduction-to-templates\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Introduction to templates<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/templates\/template-parts\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Template parts<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/patterns\/registering-patterns\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Registering patterns<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/global-settings-and-styles\/style-variations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Style variations<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/advanced-topics\/child-themes\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Child themes<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/basics\/template-hierarchy\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Template hierarchy<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/themes\/core-concepts\/main-stylesheet\/\" target=\"_blank\" rel=\"noopener noreferrer\">Theme Handbook: Main stylesheet (style.css)<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/block-editor\/reference-guides\/theme-json-reference\/theme-json-living\/\" target=\"_blank\" rel=\"noopener noreferrer\">Block Editor Handbook: Theme.json version 3 reference<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/block-editor\/how-to-guides\/themes\/global-settings-and-styles\/\" target=\"_blank\" rel=\"noopener noreferrer\">Block Editor Handbook: Global settings and styles (theme.json)<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2024\/06\/19\/theme-json-version-3\/\" target=\"_blank\" rel=\"noopener noreferrer\">Make WordPress Core: Theme.json version 3<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/schemas.wp.org\/wp\/7.1\/theme.json\" target=\"_blank\" rel=\"noopener noreferrer\">Schemat JSON theme.json dla WordPressa 7.1<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/class-wp-theme-json-resolver.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: class-wp-theme-json-resolver.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/class-wp-theme-json.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: class-wp-theme-json.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/block-template-utils.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: block-template-utils.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/block-template.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: block-template.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/blocks\/template-part.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: blocks\/template-part.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/block-patterns.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: block-patterns.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/class-wp-theme.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: class-wp-theme.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/7.1\/src\/wp-includes\/rest-api\/endpoints\/class-wp-rest-templates-controller.php\" target=\"_blank\" rel=\"noopener noreferrer\">wordpress-develop 7.1: class-wp-rest-templates-controller.php<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/cli\/commands\/post\/list\/\" target=\"_blank\" rel=\"noopener noreferrer\">WP-CLI: wp post list<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<li><a href=\"https:\/\/api.wordpress.org\/core\/version-check\/1.7\/\" target=\"_blank\" rel=\"noopener noreferrer\">API wersji WordPress.org (aktualne wydanie)<\/a> (dost\u0119p: 29.09.2026)<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Minimalny Block Theme i Child Theme krok po kroku: kt\u00f3ry Template WordPress wybiera, gdzie Site Editor zapisuje zmiany i jak \u0142\u0105cz\u0105 si\u0119 pliki theme.json.<\/p>\n","protected":false},"author":1,"featured_media":20921,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[92762,92286],"class_list":["post-20871","post","type-post","status-publish","format-standard","hentry","category-wordpress-plugins-tricks-pl","tag-web-development-pl","tag-wordpress-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-23T17:31:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Block Theme z theme.json: Templates, Parts i Child Theme\",\"datePublished\":\"2026-10-23T17:31:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/\"},\"wordCount\":2391,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20871-block-theme-theme-json-child-theme.png\",\"keywords\":[\"Web Development\",\"WordPress\"],\"articleSection\":[\"Wtyczki i triki WordPress\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/\",\"name\":\"Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20871-block-theme-theme-json-child-theme.png\",\"datePublished\":\"2026-10-23T17:31:00+00:00\",\"description\":\"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20871-block-theme-theme-json-child-theme.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20871-block-theme-theme-json-child-theme.png\",\"width\":1200,\"height\":630,\"caption\":\"Block Theme z theme.json: Templates, Parts i Child Theme\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/wordpress-plugins-tricks-pl\\\/block-theme-theme-json-child-theme\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Block Theme z theme.json: Templates, Parts i Child Theme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik","description":"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/","og_locale":"en_US","og_type":"article","og_title":"Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik","og_description":"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-23T17:31:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Block Theme z theme.json: Templates, Parts i Child Theme","datePublished":"2026-10-23T17:31:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/"},"wordCount":2391,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png","keywords":["Web Development","WordPress"],"articleSection":["Wtyczki i triki WordPress"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/","name":"Block Theme z theme.json: Templates, Parts i Child Theme | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png","datePublished":"2026-10-23T17:31:00+00:00","description":"Block Theme z theme.json w wersji 3, Templates, Template Parts, wzorzec i Child Theme: kolejno\u015b\u0107 rozwi\u0105zywania Templates i scalanie plik\u00f3w theme.json.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20871-block-theme-theme-json-child-theme.png","width":1200,"height":630,"caption":"Block Theme z theme.json: Templates, Parts i Child Theme"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/wordpress-plugins-tricks-pl\/block-theme-theme-json-child-theme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Block Theme z theme.json: Templates, Parts i Child Theme"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=20871"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20871\/revisions"}],"predecessor-version":[{"id":22801,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20871\/revisions\/22801"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/20921"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=20871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=20871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=20871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}