{"id":20870,"date":"2026-10-23T13:22:00","date_gmt":"2026-10-23T11:22:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=20870"},"modified":"2026-10-09T22:33:52","modified_gmt":"2026-10-09T20:33:52","slug":"block-themes-theme-json-child-theme","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/","title":{"rendered":"Block-Themes mit theme.json: Templates, Parts und Child-Theme"},"content":{"rendered":"<p>Ein Block-Theme besteht im Kern aus HTML-Dateien mit Block-Markup und einer einzigen JSON-Datei. Um sein Verhalten zu verstehen, sind vor allem drei Fragen wichtig: Welches Template liefert WordPress f\u00fcr eine Anfrage aus? Warum hat eine ge\u00e4nderte Datei manchmal keine sichtbare Wirkung? Was geschieht mit den Einstellungen des Eltern-Themes, wenn ein Child-Theme eine eigene <code>theme.json<\/code> mitbringt? Das bestimmen einige Funktionen im Core.<\/p>\n<p>Dieser Beitrag baut ein kleines, aber vollst\u00e4ndiges Block-Theme mit <code>style.css<\/code>, <code>theme.json<\/code>, einem Template, zwei Template Parts, einem Pattern und einer Style Variation auf und setzt anschlie\u00dfend ein Child-Theme darauf. Dabei folgt er dem Quelltext von WordPress 7.1 und zeigt, wo der Site Editor \u00c4nderungen ablegt, in welcher Reihenfolge Templates aufgel\u00f6st werden und wie die Datenebenen der globalen Einstellungen und Stile zusammenflie\u00dfen. Aktuell ist laut Versions-API von WordPress.org am 29.09.2026 die Version 7.1.2.<\/p>\n<h2>Die Dateien eines minimalen Block-Themes<\/h2>\n<p>Als Block-Theme gilt ein Theme, sobald WordPress eine lesbare Datei <code>templates\/index.html<\/code> findet. <code>WP_Theme::is_block_theme()<\/code> pr\u00fcft genau diesen Pfad und aus Kompatibilit\u00e4tsgr\u00fcnden zus\u00e4tzlich das \u00e4ltere <code>block-templates\/index.html<\/code>. Alles Weitere ist technisch optional, f\u00fcr ein brauchbares Theme aber n\u00f6tig. Der Ordner des Beispiel-Themes sieht so aus:<\/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>Die <code>style.css<\/code> tr\u00e4gt den Theme-Header. CSS muss sie bei einem Block-Theme nicht enthalten, denn die Gestaltung kommt aus der <code>theme.json<\/code>. Das Theme Handbook nennt f\u00fcr das Theme-Verzeichnis als Pflichtfelder Theme Name, Description, Version, Author, Text Domain, Tested up to, Requires at least, Requires PHP, License und License URI. Das Beispiel setzt <code>Requires at least: 6.6<\/code>, weil es <code>theme.json<\/code> in Version 3 verwendet, die mit WordPress 6.6 eingef\u00fchrt wurde.<\/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>Die Ordnernamen stehen fest: Templates liegen in <code>templates\/<\/code>, Template Parts in <code>parts\/<\/code>, Patterns in <code>patterns\/<\/code> und Style Variations in <code>styles\/<\/code>. Die alten Namen <code>block-templates\/<\/code> und <code>block-template-parts\/<\/code> erkennt <code>WP_Theme::get_block_template_folders()<\/code> weiterhin, allerdings nur als R\u00fcckfall f\u00fcr \u00e4ltere Themes.<\/p>\n<h2>theme.json: settings, styles und Version 3<\/h2>\n<p>Die <code>theme.json<\/code> gliedert sich in zwei Hauptbereiche. <code>settings<\/code> legt fest, was der Editor anbietet: Farbpaletten, Schriftgr\u00f6\u00dfen, Schriftfamilien, Layoutbreiten und freigeschaltete Gestaltungswerkzeuge. <code>styles<\/code> weist der ganzen Seite, Elementen wie Links und \u00dcberschriften sowie einzelnen Blocks konkrete Werte zu. Auf oberster Ebene kommen <code>customTemplates<\/code>, <code>templateParts<\/code> und <code>patterns<\/code> hinzu; das JSON-Schema f\u00fcr 7.1 f\u00fchrt au\u00dferdem <code>title<\/code>, <code>slug<\/code>, <code>description<\/code> und <code>blockTypes<\/code>, die f\u00fcr Style Variations gebraucht werden.<\/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>Auf die Versionsnummer kommt es an. Die theme.json-Referenz auf developer.wordpress.org beschreibt Version 3, laut Block Editor Handbook eingef\u00fchrt mit WordPress 6.6. Im Quelltext von 7.1 steht <code>WP_Theme_JSON::LATEST_SCHEMA<\/code> ebenfalls auf 3. Die Dev Note auf make.wordpress.org beschreibt die einzige inkompatible \u00c4nderung: Ab Version 3 kann ein Theme die Standard-Schriftgr\u00f6\u00dfen und -Abst\u00e4nde nicht mehr stillschweigend ersetzen, indem es deren Slugs wiederverwendet. Wer Slugs wie <code>small<\/code>, <code>medium<\/code> und <code>large<\/code> mit eigenen Werten belegen will, muss <code>defaultFontSizes<\/code> (bzw. <code>defaultSpacingSizes<\/code>) auf <code>false<\/code> setzen, so wie im Beispiel. \u00c4ltere Versionen bleiben laut Block Editor Handbook weiter lauff\u00e4hig.<\/p>\n<p>F\u00fcr den Schl\u00fcssel <code>$schema<\/code> gibt es zwei Varianten: <code>https:\/\/schemas.wp.org\/trunk\/theme.json<\/code> folgt der Entwicklung, <code>https:\/\/schemas.wp.org\/wp\/7.1\/theme.json<\/code> ist an eine Version gebunden. Die Exportfunktion im Core schreibt die versionierte Form, und die ist auch f\u00fcr die Autovervollst\u00e4ndigung im Editor die sicherere Wahl, weil das Trunk-Schema bereits Eigenschaften beschreiben kann, die die installierte Version nicht kennt. Alle drei JSON-Dateien dieses Beitrags wurden gegen das Schema f\u00fcr 7.1 validiert.<\/p>\n<p>Das Array <code>templateParts<\/code> gibt jeder Datei in <code>parts\/<\/code> einen Titel und einen Bereich (area). Der Core definiert die Bereiche <code>header<\/code>, <code>footer<\/code> und <code>uncategorized<\/code>; seit 7.0 enth\u00e4lt der Quelltext zus\u00e4tzlich <code>navigation-overlay<\/code>. Der Bereich bestimmt, wo der Site Editor den Part einordnet und welches HTML-Element ihn umschlie\u00dft, falls kein <code>tagName<\/code> gesetzt ist.<\/p>\n<h2>Templates, Template Parts und ein Pattern<\/h2>\n<p>Ein Template ist eine HTML-Datei mit serialisierten Blocks. Die folgende <code>index.html<\/code> bindet Header und Footer ein, umschlie\u00dft den Inhalt mit einem <code>main<\/code>-Element und verwendet den Query-Loop-Block mit <code>\"inherit\":true<\/code>. Damit zeigt er, was die Hauptabfrage der jeweiligen Anfrage liefert, also Blog-\u00dcbersicht, Archiv oder Suchergebnisse.<\/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 werden \u00fcber ihren Slug eingebunden. Das Attribut <code>theme<\/code> fehlt mit Absicht. Die Render-Funktion des Template-Part-Blocks greift ohne dieses Attribut auf <code>get_stylesheet()<\/code> zur\u00fcck, also auf das aktive Theme. St\u00fcnde dort fest der Slug des Eltern-Themes, passte die Abfrage bei aktivem Child-Theme nicht mehr, und der Part w\u00fcrde als leerer String ausgegeben. Erst das fehlende Attribut erlaubt es einem Child-Theme, den Part zu ersetzen.<\/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>Der Footer enth\u00e4lt keinen eigenen Text, sondern l\u00e4dt ein Pattern. Pattern-Dateien in <code>patterns\/<\/code> registriert WordPress auf <code>init<\/code> automatisch, sofern der Dateikopf mindestens <code>Title<\/code> und <code>Slug<\/code> enth\u00e4lt; Dateien ohne diese Felder weist der Core mit einem <code>_doing_it_wrong()<\/code>-Hinweis ab. Da die Datei PHP ist, lassen sich Texte mit der Text Domain des Themes \u00fcbersetzen, was in einem reinen HTML-Template nicht geht.<\/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>Eine Style Variation ist eine unvollst\u00e4ndige <code>theme.json<\/code> im Ordner <code>styles\/<\/code> und enth\u00e4lt nur, was von der Hauptdatei abweicht. W\u00e4hlt jemand sie im Site Editor aus, landen ihre Daten laut Theme Handbook als Nutzeranpassung in der Datenbank. Sp\u00e4tere \u00c4nderungen an der Variation erreichen Websites, die sie bereits gespeichert haben, deshalb nicht mehr.<\/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>Was der Site Editor in die Datenbank schreibt<\/h2>\n<p>Solange niemand etwas anpasst, liest WordPress die Theme-Dateien direkt. Wird ein Template im Site Editor gespeichert, legt der Core das vollst\u00e4ndige Block-Markup als Beitrag ab. Beteiligt sind drei Post Types: <code>wp_template<\/code> f\u00fcr Templates, <code>wp_template_part<\/code> f\u00fcr Template Parts und <code>wp_global_styles<\/code> f\u00fcr \u00c4nderungen an den globalen Stilen, einschlie\u00dflich einer gew\u00e4hlten Style Variation. Der <code>post_name<\/code> eines Template-Beitrags ist der Template-Slug, etwa <code>index<\/code> oder <code>single<\/code>.<\/p>\n<p>Die Taxonomie <code>wp_theme<\/code> ordnet diese Beitr\u00e4ge einem Theme zu. Ihr Term ist das Stylesheet, also der Ordnername des aktiven Themes. Ist ein Child-Theme aktiv, z\u00e4hlt dessen Ordnername statt des Ordnernamens des Eltern-Themes. <code>get_block_templates()<\/code> fragt nur Beitr\u00e4ge ab, deren Term <code>get_stylesheet()<\/code> entspricht. Template Parts tragen zus\u00e4tzlich einen Term der Taxonomie <code>wp_template_part_area<\/code>. Intern hat jedes Template die ID <code>stylesheet\/\/slug<\/code>, zum Beispiel <code>lw-child\/\/index<\/code>.<\/p>\n<p>Daraus folgt: Ein gespeichertes Template schl\u00e4gt die Datei mit demselben Slug. <code>get_block_templates()<\/code> holt zuerst die Datenbanktreffer und \u00fcbergibt deren Slugs anschlie\u00dfend als <code>slug__not_in<\/code> an die Dateisuche; die Theme-Datei wird also gar nicht mehr betrachtet. \u00c4ndert ein Theme-Update sp\u00e4ter <code>templates\/index.html<\/code>, bleibt das unsichtbar, bis die Anpassung entfernt ist. Der REST-Controller f\u00fcr Templates erlaubt das L\u00f6schen nur bei Templates mit der Quelle <code>custom<\/code>; bei einem Template, das auf einer Theme-Datei beruht, stellt das L\u00f6schen des Beitrags die Dateifassung wieder her. Welche Anpassungen auf einer Website existieren, zeigt 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>Weil die Abfrage nach dem Stylesheet-Term filtert, macht ein Theme-Wechsel diese Beitr\u00e4ge unwirksam, entfernt sie aber nicht: Die Beitr\u00e4ge bleiben unter dem alten Term in der Datenbank und greifen wieder, sobald das Theme erneut aktiv ist. Der Export im Site Editor, umgesetzt in <code>wp_generate_block_templates_export_file()<\/code>, erzeugt ein ZIP mit den Theme-Dateien, den aktuellen Templates und Parts sowie einer <code>theme.json<\/code>, in der Theme-Daten und Nutzerdaten zusammengef\u00fchrt sind.<\/p>\n<h2>Aufl\u00f6sung eines Templates: Datenbank, Child, Parent, R\u00fcckfall<\/h2>\n<p>Die Vorlagenhierarchie ist bei Block-Themes dieselbe wie bei klassischen Themes; das Theme Handbook vermerkt nur, dass HTML-Dateien an die Stelle der PHP-Dateien treten. F\u00fcr einen einzelnen Beitrag erzeugt WordPress eine Liste von Kandidaten wie <code>single-post-hallo-welt<\/code>, <code>single-post<\/code>, <code>single<\/code>, <code>singular<\/code> und <code>index<\/code>. <code>locate_block_template()<\/code> reicht diese Liste an <code>resolve_block_template()<\/code> weiter, das <code>get_block_templates()<\/code> mit allen Kandidaten aufruft und die Treffer danach nach ihrer Position in der Hierarchie sortiert.<\/p>\n<p>Je Slug gilt eine feste Reihenfolge der Quellen. Zuerst z\u00e4hlt ein <code>wp_template<\/code>-Beitrag f\u00fcr das aktive Stylesheet. Danach liest <code>_get_block_templates_files()<\/code> den Ordner <code>templates\/<\/code> des Child-Themes vor dem des Eltern-Themes; ein im Child gefundener Slug wird im Parent \u00fcbersprungen. Es folgen Templates, die Plugins seit WordPress 6.7 mit <code>register_block_template()<\/code> registrieren, allerdings nur, wenn keine Theme-Datei mit demselben Slug existiert. Eigene HTML-Templates f\u00fcr Themes bringt WordPress nicht mit; der eigentliche Core-R\u00fcckfall ist deshalb der n\u00e4chste, weniger spezifische Slug der Hierarchie bis hinunter zu <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-de.png?v=20260930\" width=\"1120\" height=\"580\" alt=\"Aufl\u00f6sung eines Templates im Block-Theme: F\u00fcr jeden Slug von single-post-{slug} bis index pr\u00fcft WordPress der Reihe nach Datenbank, Child-Theme, Eltern-Theme und Plugin-Registry; template-canvas.php gibt den ersten Treffer aus, index.html ist der letzte R\u00fcckfall, Template Parts folgen derselben Reihenfolge\">\n<figcaption>Je Slug: Datenbank vor Child-Theme vor Eltern-Theme vor Plugin-Registry; ohne Treffer folgt der n\u00e4chste, allgemeinere Slug<\/figcaption>\n<\/figure>\n<p>Der spezifischste Slug gewinnt immer, unabh\u00e4ngig von seiner Quelle. Eine <code>single.html<\/code> im Eltern-Theme schl\u00e4gt also eine im Site Editor angepasste <code>index.html<\/code>, weil <code>single<\/code> in der Hierarchie vor <code>index<\/code> steht. Die Reihenfolge der Quellen entscheidet nur zwischen Eintr\u00e4gen mit gleichem Slug. Template Parts folgen demselben Muster: Die Render-Funktion des Template-Part-Blocks sucht erst einen <code>wp_template_part<\/code>-Beitrag und ruft dann <code>get_block_file_template()<\/code> auf, das \u00fcber <code>_get_block_template_file()<\/code> zuerst das Stylesheet- und dann das Template-Verzeichnis durchsucht.<\/p>\n<p>Ausgegeben wird das gefundene Block-Markup \u00fcber <code>wp-includes\/template-canvas.php<\/code>. Ist ein gespeichertes Template leer, sehen angemeldete Nutzer seit 6.8 einen Hinweis mit Link zum Site Editor; Besucher bekommen stattdessen den Inhalt der Theme-Datei, sofern es eine gibt.<\/p>\n<h2>Ein Child-Theme f\u00fcr ein Block-Theme<\/h2>\n<p>Zwingend braucht ein Child-Theme nur die <code>style.css<\/code> mit dem Header <code>Template<\/code>. Laut Theme Handbook muss dessen Wert exakt dem Ordnernamen des Eltern-Themes entsprechen. Das Beispiel-Child bringt zus\u00e4tzlich eine eigene Palette und einen ge\u00e4nderten Header mit.<\/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>Eine eigene <code>templates\/index.html<\/code> ist im Child nicht n\u00f6tig. <code>WP_Theme::get_file_path()<\/code> sucht zuerst im Stylesheet- und danach im Template-Verzeichnis, daher findet <code>is_block_theme()<\/code> die Datei des Eltern-Themes und behandelt auch das Child als Block-Theme. Was im Child fehlt, kommt aus dem Parent: Templates, Template Parts, Patterns und Style Variations.<\/p>\n<p>\u00dcberschrieben wird St\u00fcck f\u00fcr St\u00fcck. Eine gleichnamige Datei in <code>templates\/<\/code> oder <code>parts\/<\/code> ersetzt die Fassung des Eltern-Themes. Bei Patterns z\u00e4hlt in <code>_register_theme_block_patterns()<\/code> nicht der Dateiname, sondern der <code>Slug<\/code> im Dateikopf: Die Patterns des Childs werden zuerst registriert, ein Parent-Pattern mit bereits vergebenem Slug wird \u00fcbersprungen. Bei Style Variations vergleicht <code>get_style_variations()<\/code> die Dateinamen beider <code>styles\/<\/code>-Ordner und beh\u00e4lt bei Gleichheit nur die Datei des Childs. Der ersetzte Header im Child sieht so aus:<\/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>Aus dem Stylesheet-Term folgt noch eine praktische Einzelheit. Anpassungen, die im Site Editor bei aktivem Eltern-Theme entstanden sind, geh\u00f6ren zu dessen Stylesheet. Nach dem Wechsel auf das Child greifen sie nicht mehr; das Child startet mit den Dateien.<\/p>\n<h2>Wie die theme.json von Parent und Child zusammengef\u00fchrt wird<\/h2>\n<p>Globale Einstellungen und Stile stammen aus vier Quellen, die <code>WP_Theme_JSON_Resolver::get_merged_data()<\/code> in fester Reihenfolge zusammenf\u00fchrt: <code>default<\/code> (die <code>theme.json<\/code> des Cores), <code>blocks<\/code> (Daten aus Block-Registrierungen), <code>theme<\/code> und <code>custom<\/code> (Nutzerdaten aus dem <code>wp_global_styles<\/code>-Beitrag). Jede sp\u00e4tere Ebene \u00fcberschreibt die fr\u00fcheren. Die Code-Dokumentation nennt als Beispiel eine Hintergrundfarbe f\u00fcr den Absatz-Block, die sowohl Theme als auch Nutzer setzen: Die Nutzereinstellung gewinnt.<\/p>\n<p>Die Ebene <code>theme<\/code> setzt sich selbst aus mehreren Teilen zusammen. <code>get_theme_data()<\/code> liest zuerst die <code>theme.json<\/code> des aktiven Themes, also des Childs. Gibt es ein Eltern-Theme mit einer anderen <code>theme.json<\/code>, erzeugt der Resolver aus der Parent-Datei ein <code>WP_Theme_JSON<\/code>-Objekt und f\u00fchrt die Child-Daten hinein; laut Kommentar im Quelltext hat das Child Vorrang. Zum Schluss wird dieses Ergebnis \u00fcber die Werte aus <code>add_theme_support()<\/code> gelegt, sodass die <code>theme.json<\/code> Theme Supports schl\u00e4gt.<\/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>Das Zusammenf\u00fchren selbst, <code>WP_Theme_JSON::merge()<\/code>, arbeitet mit <code>array_replace_recursive()<\/code>; verschachtelte Objekte werden also Schl\u00fcssel f\u00fcr Schl\u00fcssel kombiniert. Im Beispiel bleiben Layout, Typografie und Linkfarbe des Parents erhalten, das Child erg\u00e4nzt das Schriftgewicht der \u00dcberschriften.<\/p>\n<p>Presets sind die Ausnahme: Paletten, Verl\u00e4ufe, Duotone-Filter, Schriftgr\u00f6\u00dfen, Schriftfamilien und die \u00fcbrigen Preset-Listen, etwa Abstandsgr\u00f6\u00dfen und Schatten, werden jeweils als ganze Liste ersetzt. Die Palette des Childs ersetzt deshalb die Palette des Parents, statt sie zu erweitern.<\/p>\n<p>Deshalb wiederholt das Child alle drei Slugs. St\u00fcnde dort nur <code>accent<\/code>, fehlten <code>base<\/code> und <code>contrast<\/code>, und jeder Stil, der auf sie verweist, verl\u00f6re seinen Wert. Die wirksame Theme-Palette l\u00e4sst sich auf einer Testinstallation pr\u00fcfen:<\/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>Die Option <code>\"origin\" =&gt; \"base\"<\/code> l\u00e4sst die Nutzerebene weg, die Ausgabe zeigt also nur das zusammengef\u00fchrte Ergebnis aus Parent und Child.<\/p>\n<h2>Grenzen und offene Punkte<\/h2>\n<ul>\n<li>Der Filter <code>wp_theme_json_data_theme<\/code> erh\u00e4lt die Daten des Childs, bevor die Parent-Datei eingemischt wird. Ein Callback, der die vollst\u00e4ndigen Theme-Daten erwartet, sieht bei aktivem Child-Theme nur den Child-Anteil.<\/li>\n<li>Mischformen mit PHP-Templates folgen zus\u00e4tzlichen Regeln. Findet <code>locate_template()<\/code> eine PHP-Datei, kommen nur Block-Templates mit gleicher oder h\u00f6herer Spezifit\u00e4t in Frage, und ein PHP-Template im Child kann Vorrang vor einem gleichnamigen Block-Template im Parent haben.<\/li>\n<li>Das Theme Handbook beschreibt, dass Patterns im Child durch eine gleichnamige Datei \u00fcberschrieben werden; der Quelltext von 7.1 vergleicht Slugs. Dieser Beitrag folgt dem Quelltext.<\/li>\n<li>Einige Handbook-Seiten zeigen in ihren Beispielen noch <code>\"version\": 2<\/code>, w\u00e4hrend die Referenz Version 3 beschreibt.<\/li>\n<li>Die Beispiele wurden am 30.09.2026 unter WordPress 7.1.2 getestet: Beide Themes lassen sich ohne Meldungen aktivieren, das Child gilt ohne eigene <code>index.html<\/code> als Block-Theme, das Block-Markup besteht die Pr\u00fcfung im Site Editor, und der Vorrang der Templates, die Folgen eines Theme-Wechsels und das Ersetzen der Palette verhalten sich wie beschrieben. Ein verwandtes Thema behandelt <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/wordpress-7-1-2-sicherheitsupdate-seitenvorlagen\/\">der Beitrag zur Sicherheitsl\u00fccke bei Seitenvorlagen in WordPress 7.1.2<\/a>.<\/li>\n<\/ul>\n\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n\n<h3>Braucht ein Child-Theme eines Block-Themes eine eigene templates\/index.html?<\/h3>\n<p>Nein. <code>WP_Theme::is_block_theme()<\/code> sucht die Datei \u00fcber <code>get_file_path()<\/code>, und diese Methode pr\u00fcft zuerst das Stylesheet- und dann das Template-Verzeichnis. Die <code>index.html<\/code> des Eltern-Themes gen\u00fcgt also, damit auch das Child als Block-Theme gilt. Eine eigene Datei ist nur n\u00f6tig, wenn das Child das Template tats\u00e4chlich ver\u00e4ndern soll.<\/p>\n\n<h3>Warum wirkt eine ge\u00e4nderte Template-Datei nach einem Theme-Update nicht?<\/h3>\n<p>Meist existiert f\u00fcr denselben Slug eine Anpassung aus dem Site Editor. Diese Anpassung liegt als Beitrag vom Typ <code>wp_template<\/code> (bzw. <code>wp_template_part<\/code>) in der Datenbank und hat Vorrang; die Datei wird dann gar nicht mehr gelesen. Mit <code>wp post list --post_type=wp_template,wp_template_part<\/code> l\u00e4sst sich das pr\u00fcfen. Erst wenn die Anpassung entfernt ist, greift wieder die Dateifassung.<\/p>\n\n<h3>Erg\u00e4nzt die Farbpalette des Child-Themes die Palette des Eltern-Themes?<\/h3>\n<p>Nein, sie ersetzt sie. <code>WP_Theme_JSON::merge()<\/code> kombiniert zwar verschachtelte Objekte Schl\u00fcssel f\u00fcr Schl\u00fcssel, Presets wie Paletten, Verl\u00e4ufe, Schriftgr\u00f6\u00dfen und Schriftfamilien werden aber als ganze Liste \u00fcbernommen. Das Child muss daher alle Farben auff\u00fchren, die weiter verf\u00fcgbar sein sollen, auch die unver\u00e4nderten.<\/p>\n<\/div>\n\n<div class=\"lw-quellen\">\n<h2>Quellen<\/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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/schemas.wp.org\/wp\/7.1\/theme.json\" target=\"_blank\" rel=\"noopener noreferrer\">JSON-Schema theme.json f\u00fcr WordPress 7.1<\/a> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 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> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/api.wordpress.org\/core\/version-check\/1.7\/\" target=\"_blank\" rel=\"noopener noreferrer\">Versions-API von WordPress.org (aktuelle Version)<\/a> (abgerufen am 29.09.2026)<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Ein minimales Block-Theme samt Child-Theme, Schritt f\u00fcr Schritt: welches Template WordPress ausliefert, wo der Site Editor speichert und wie theme.json zusammenflie\u00dft.<\/p>\n","protected":false},"author":1,"featured_media":20919,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[92759,92277],"class_list":["post-20870","post","type-post","status-publish","format-standard","hentry","category-wordpress-plugins-tricks-de","tag-web-development-de","tag-wordpress-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Block-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der 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\/de\/wordpress-plugins-tricks-de\/block-themes-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-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der theme.json.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-23T11:22:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-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=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Block-Themes mit theme.json: Templates, Parts und Child-Theme\",\"datePublished\":\"2026-10-23T11:22:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/\"},\"wordCount\":2248,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20870-block-themes-theme-json-child-theme.png\",\"keywords\":[\"Web Development\",\"WordPress\"],\"articleSection\":[\"WordPress-Plugins &amp; Tricks\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/\",\"name\":\"Block-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20870-block-themes-theme-json-child-theme.png\",\"datePublished\":\"2026-10-23T11:22:00+00:00\",\"description\":\"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der theme.json.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20870-block-themes-theme-json-child-theme.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20870-block-themes-theme-json-child-theme.png\",\"width\":1200,\"height\":630,\"caption\":\"Block-Themes mit theme.json: Templates, Parts und Child-Theme\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/block-themes-theme-json-child-theme\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Block-Themes mit theme.json: Templates, Parts und 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-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik","description":"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der 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\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/","og_locale":"en_US","og_type":"article","og_title":"Block-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik","og_description":"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der theme.json.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-23T11:22:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-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":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Block-Themes mit theme.json: Templates, Parts und Child-Theme","datePublished":"2026-10-23T11:22:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/"},"wordCount":2248,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-theme-json-child-theme.png","keywords":["Web Development","WordPress"],"articleSection":["WordPress-Plugins &amp; Tricks"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/","name":"Block-Themes mit theme.json: Templates, Parts und Child-Theme | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-theme-json-child-theme.png","datePublished":"2026-10-23T11:22:00+00:00","description":"Block-Theme mit theme.json Version 3, Templates, Parts, Pattern und Child-Theme: Aufl\u00f6sungsreihenfolge der Templates und Zusammenf\u00fchrung der theme.json.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-theme-json-child-theme.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20870-block-themes-theme-json-child-theme.png","width":1200,"height":630,"caption":"Block-Themes mit theme.json: Templates, Parts und Child-Theme"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/block-themes-theme-json-child-theme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Block-Themes mit theme.json: Templates, Parts und 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\/20870","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=20870"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20870\/revisions"}],"predecessor-version":[{"id":22800,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20870\/revisions\/22800"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/20919"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=20870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=20870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=20870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}