FSE: Allow child theme.json to be merged with parent theme.json #35459
Conversation
Co-authored-by: Ari Stathopoulos <[email protected]>
Co-authored-by: George Mamadashvili <[email protected]>
Co-authored-by: George Mamadashvili <[email protected]>
I was testing the second scenario and it reports an error because the parent's |
The current At #34843 I'm working on some code simplifications but we essentially have two code paths:
So I was thinking about how the "theme supports" of the parent theme fit in this new scenario. As far as I've tested, it seems theme supports are inherited by the child. I've tested this by creating a child of TwentyTwentyOne and verifying that the child still has support for line height and links as declared by the parent, as well as it takes palettes from the parent. I've also looked into Just wanted to bring it up to make sure others check this as well, in case I've missed anything. |
Follow-up on my comment above. I've tried to remove theme support in the child theme by doing: function twenty_twenty_one_child_setup() {
remove_theme_support( 'experimental-link-color' );
remove_theme_support( 'custom-line-height' );
}
add_action( 'after_setup_theme', 'twenty_twenty_one_child_setup' ); but it didn't work. I still saw the link panel and the line-height control in the block sidebar. Not sure if I'm doing something wrong. |
Only use get_theme_file_path in theme_has_support check
Method changes
In ProgressCurrently working on integration tests for this scenario - "Parent & child have theme.json => merge child with a parent." I think other cases outlined by Andre are straightforward, and we can unit test those with the Re:
|
I added integration tests for parent/child theme data merging. Let me know if we want to cover more cases. The |
Size Change: 0 B Total Size: 1.07 MB
|
Filename | Size |
---|---|
build/a11y/index.min.js |
931 B |
build/admin-manifest/index.min.js |
1.09 kB |
build/annotations/index.min.js |
2.7 kB |
build/api-fetch/index.min.js |
2.21 kB |
build/autop/index.min.js |
2.08 kB |
build/blob/index.min.js |
459 B |
build/block-directory/index.min.js |
6.2 kB |
build/block-directory/style-rtl.css |
1.01 kB |
build/block-directory/style.css |
1.01 kB |
build/block-editor/default-editor-styles-rtl.css |
378 B |
build/block-editor/default-editor-styles.css |
378 B |
build/block-editor/index.min.js |
134 kB |
build/block-editor/style-rtl.css |
13.9 kB |
build/block-editor/style.css |
13.9 kB |
build/block-library/blocks/archives/editor-rtl.css |
61 B |
build/block-library/blocks/archives/editor.css |
60 B |
build/block-library/blocks/archives/style-rtl.css |
65 B |
build/block-library/blocks/archives/style.css |
65 B |
build/block-library/blocks/audio/editor-rtl.css |
58 B |
build/block-library/blocks/audio/editor.css |
58 B |
build/block-library/blocks/audio/style-rtl.css |
111 B |
build/block-library/blocks/audio/style.css |
111 B |
build/block-library/blocks/audio/theme-rtl.css |
125 B |
build/block-library/blocks/audio/theme.css |
125 B |
build/block-library/blocks/block/editor-rtl.css |
161 B |
build/block-library/blocks/block/editor.css |
161 B |
build/block-library/blocks/button/editor-rtl.css |
470 B |
build/block-library/blocks/button/editor.css |
470 B |
build/block-library/blocks/button/style-rtl.css |
549 B |
build/block-library/blocks/button/style.css |
549 B |
build/block-library/blocks/buttons/editor-rtl.css |
309 B |
build/block-library/blocks/buttons/editor.css |
309 B |
build/block-library/blocks/buttons/style-rtl.css |
317 B |
build/block-library/blocks/buttons/style.css |
317 B |
build/block-library/blocks/calendar/style-rtl.css |
207 B |
build/block-library/blocks/calendar/style.css |
207 B |
build/block-library/blocks/categories/editor-rtl.css |
84 B |
build/block-library/blocks/categories/editor.css |
83 B |
build/block-library/blocks/categories/style-rtl.css |
79 B |
build/block-library/blocks/categories/style.css |
79 B |
build/block-library/blocks/code/style-rtl.css |
90 B |
build/block-library/blocks/code/style.css |
90 B |
build/block-library/blocks/code/theme-rtl.css |
131 B |
build/block-library/blocks/code/theme.css |
131 B |
build/block-library/blocks/columns/editor-rtl.css |
206 B |
build/block-library/blocks/columns/editor.css |
205 B |
build/block-library/blocks/columns/style-rtl.css |
497 B |
build/block-library/blocks/columns/style.css |
496 B |
build/block-library/blocks/cover/editor-rtl.css |
546 B |
build/block-library/blocks/cover/editor.css |
547 B |
build/block-library/blocks/cover/style-rtl.css |
1.17 kB |
build/block-library/blocks/cover/style.css |
1.17 kB |
build/block-library/blocks/embed/editor-rtl.css |
488 B |
build/block-library/blocks/embed/editor.css |
488 B |
build/block-library/blocks/embed/style-rtl.css |
417 B |
build/block-library/blocks/embed/style.css |
417 B |
build/block-library/blocks/embed/theme-rtl.css |
124 B |
build/block-library/blocks/embed/theme.css |
124 B |
build/block-library/blocks/file/editor-rtl.css |
300 B |
build/block-library/blocks/file/editor.css |
300 B |
build/block-library/blocks/file/style-rtl.css |
255 B |
build/block-library/blocks/file/style.css |
255 B |
build/block-library/blocks/file/view.min.js |
322 B |
build/block-library/blocks/freeform/editor-rtl.css |
2.44 kB |
build/block-library/blocks/freeform/editor.css |
2.44 kB |
build/block-library/blocks/gallery/editor-rtl.css |
977 B |
build/block-library/blocks/gallery/editor.css |
982 B |
build/block-library/blocks/gallery/style-rtl.css |
1.6 kB |
build/block-library/blocks/gallery/style.css |
1.59 kB |
build/block-library/blocks/gallery/theme-rtl.css |
122 B |
build/block-library/blocks/gallery/theme.css |
122 B |
build/block-library/blocks/group/editor-rtl.css |
159 B |
build/block-library/blocks/group/editor.css |
159 B |
build/block-library/blocks/group/style-rtl.css |
57 B |
build/block-library/blocks/group/style.css |
57 B |
build/block-library/blocks/group/theme-rtl.css |
78 B |
build/block-library/blocks/group/theme.css |
78 B |
build/block-library/blocks/heading/style-rtl.css |
114 B |
build/block-library/blocks/heading/style.css |
114 B |
build/block-library/blocks/home-link/style-rtl.css |
247 B |
build/block-library/blocks/home-link/style.css |
247 B |
build/block-library/blocks/html/editor-rtl.css |
332 B |
build/block-library/blocks/html/editor.css |
333 B |
build/block-library/blocks/image/editor-rtl.css |
731 B |
build/block-library/blocks/image/editor.css |
730 B |
build/block-library/blocks/image/style-rtl.css |
502 B |
build/block-library/blocks/image/style.css |
505 B |
build/block-library/blocks/image/theme-rtl.css |
124 B |
build/block-library/blocks/image/theme.css |
124 B |
build/block-library/blocks/latest-comments/style-rtl.css |
284 B |
build/block-library/blocks/latest-comments/style.css |
284 B |
build/block-library/blocks/latest-posts/editor-rtl.css |
137 B |
build/block-library/blocks/latest-posts/editor.css |
137 B |
build/block-library/blocks/latest-posts/style-rtl.css |
528 B |
build/block-library/blocks/latest-posts/style.css |
527 B |
build/block-library/blocks/list/style-rtl.css |
94 B |
build/block-library/blocks/list/style.css |
94 B |
build/block-library/blocks/media-text/editor-rtl.css |
266 B |
build/block-library/blocks/media-text/editor.css |
263 B |
build/block-library/blocks/media-text/style-rtl.css |
493 B |
build/block-library/blocks/media-text/style.css |
490 B |
build/block-library/blocks/more/editor-rtl.css |
431 B |
build/block-library/blocks/more/editor.css |
431 B |
build/block-library/blocks/navigation-link/editor-rtl.css |
568 B |
build/block-library/blocks/navigation-link/editor.css |
570 B |
build/block-library/blocks/navigation-link/style-rtl.css |
94 B |
build/block-library/blocks/navigation-link/style.css |
94 B |
build/block-library/blocks/navigation-submenu/editor-rtl.css |
300 B |
build/block-library/blocks/navigation-submenu/editor.css |
299 B |
build/block-library/blocks/navigation-submenu/style-rtl.css |
195 B |
build/block-library/blocks/navigation-submenu/style.css |
195 B |
build/block-library/blocks/navigation-submenu/view.min.js |
343 B |
build/block-library/blocks/navigation/editor-rtl.css |
1.71 kB |
build/block-library/blocks/navigation/editor.css |
1.71 kB |
build/block-library/blocks/navigation/style-rtl.css |
1.64 kB |
build/block-library/blocks/navigation/style.css |
1.64 kB |
build/block-library/blocks/navigation/view.min.js |
2.74 kB |
build/block-library/blocks/nextpage/editor-rtl.css |
395 B |
build/block-library/blocks/nextpage/editor.css |
395 B |
build/block-library/blocks/page-list/editor-rtl.css |
377 B |
build/block-library/blocks/page-list/editor.css |
377 B |
build/block-library/blocks/page-list/style-rtl.css |
198 B |
build/block-library/blocks/page-list/style.css |
198 B |
build/block-library/blocks/paragraph/editor-rtl.css |
157 B |
build/block-library/blocks/paragraph/editor.css |
157 B |
build/block-library/blocks/paragraph/style-rtl.css |
273 B |
build/block-library/blocks/paragraph/style.css |
273 B |
build/block-library/blocks/post-author/style-rtl.css |
175 B |
build/block-library/blocks/post-author/style.css |
176 B |
build/block-library/blocks/post-comments-form/style-rtl.css |
140 B |
build/block-library/blocks/post-comments-form/style.css |
140 B |
build/block-library/blocks/post-comments/style-rtl.css |
360 B |
build/block-library/blocks/post-comments/style.css |
359 B |
build/block-library/blocks/post-excerpt/editor-rtl.css |
73 B |
build/block-library/blocks/post-excerpt/editor.css |
73 B |
build/block-library/blocks/post-excerpt/style-rtl.css |
69 B |
build/block-library/blocks/post-excerpt/style.css |
69 B |
build/block-library/blocks/post-featured-image/editor-rtl.css |
396 B |
build/block-library/blocks/post-featured-image/editor.css |
397 B |
build/block-library/blocks/post-featured-image/style-rtl.css |
156 B |
build/block-library/blocks/post-featured-image/style.css |
156 B |
build/block-library/blocks/post-template/editor-rtl.css |
99 B |
build/block-library/blocks/post-template/editor.css |
98 B |
build/block-library/blocks/post-template/style-rtl.css |
391 B |
build/block-library/blocks/post-template/style.css |
392 B |
build/block-library/blocks/post-terms/style-rtl.css |
73 B |
build/block-library/blocks/post-terms/style.css |
73 B |
build/block-library/blocks/post-title/style-rtl.css |
60 B |
build/block-library/blocks/post-title/style.css |
60 B |
build/block-library/blocks/preformatted/style-rtl.css |
103 B |
build/block-library/blocks/preformatted/style.css |
103 B |
build/block-library/blocks/pullquote/editor-rtl.css |
198 B |
build/block-library/blocks/pullquote/editor.css |
198 B |
build/block-library/blocks/pullquote/style-rtl.css |
378 B |
build/block-library/blocks/pullquote/style.css |
378 B |
build/block-library/blocks/pullquote/theme-rtl.css |
167 B |
build/block-library/blocks/pullquote/theme.css |
167 B |
build/block-library/blocks/query-pagination-numbers/editor-rtl.css |
122 B |
build/block-library/blocks/query-pagination-numbers/editor.css |
121 B |
build/block-library/blocks/query-pagination/editor-rtl.css |
262 B |
build/block-library/blocks/query-pagination/editor.css |
255 B |
build/block-library/blocks/query-pagination/style-rtl.css |
234 B |
build/block-library/blocks/query-pagination/style.css |
231 B |
build/block-library/blocks/query/editor-rtl.css |
131 B |
build/block-library/blocks/query/editor.css |
132 B |
build/block-library/blocks/quote/style-rtl.css |
187 B |
build/block-library/blocks/quote/style.css |
187 B |
build/block-library/blocks/quote/theme-rtl.css |
220 B |
build/block-library/blocks/quote/theme.css |
222 B |
build/block-library/blocks/rss/editor-rtl.css |
202 B |
build/block-library/blocks/rss/editor.css |
204 B |
build/block-library/blocks/rss/style-rtl.css |
289 B |
build/block-library/blocks/rss/style.css |
288 B |
build/block-library/blocks/search/editor-rtl.css |
165 B |
build/block-library/blocks/search/editor.css |
165 B |
build/block-library/blocks/search/style-rtl.css |
374 B |
build/block-library/blocks/search/style.css |
375 B |
build/block-library/blocks/search/theme-rtl.css |
64 B |
build/block-library/blocks/search/theme.css |
64 B |
build/block-library/blocks/separator/editor-rtl.css |
99 B |
build/block-library/blocks/separator/editor.css |
99 B |
build/block-library/blocks/separator/style-rtl.css |
250 B |
build/block-library/blocks/separator/style.css |
250 B |
build/block-library/blocks/separator/theme-rtl.css |
172 B |
build/block-library/blocks/separator/theme.css |
172 B |
build/block-library/blocks/shortcode/editor-rtl.css |
474 B |
build/block-library/blocks/shortcode/editor.css |
474 B |
build/block-library/blocks/site-logo/editor-rtl.css |
769 B |
build/block-library/blocks/site-logo/editor.css |
769 B |
build/block-library/blocks/site-logo/style-rtl.css |
165 B |
build/block-library/blocks/site-logo/style.css |
165 B |
build/block-library/blocks/site-tagline/editor-rtl.css |
86 B |
build/block-library/blocks/site-tagline/editor.css |
86 B |
build/block-library/blocks/site-title/editor-rtl.css |
84 B |
build/block-library/blocks/site-title/editor.css |
84 B |
build/block-library/blocks/social-link/editor-rtl.css |
177 B |
build/block-library/blocks/social-link/editor.css |
177 B |
build/block-library/blocks/social-links/editor-rtl.css |
824 B |
build/block-library/blocks/social-links/editor.css |
823 B |
build/block-library/blocks/social-links/style-rtl.css |
1.32 kB |
build/block-library/blocks/social-links/style.css |
1.32 kB |
build/block-library/blocks/spacer/editor-rtl.css |
307 B |
build/block-library/blocks/spacer/editor.css |
307 B |
build/block-library/blocks/spacer/style-rtl.css |
48 B |
build/block-library/blocks/spacer/style.css |
48 B |
build/block-library/blocks/table/editor-rtl.css |
471 B |
build/block-library/blocks/table/editor.css |
472 B |
build/block-library/blocks/table/style-rtl.css |
481 B |
build/block-library/blocks/table/style.css |
481 B |
build/block-library/blocks/table/theme-rtl.css |
188 B |
build/block-library/blocks/table/theme.css |
188 B |
build/block-library/blocks/tag-cloud/style-rtl.css |
146 B |
build/block-library/blocks/tag-cloud/style.css |
146 B |
build/block-library/blocks/template-part/editor-rtl.css |
560 B |
build/block-library/blocks/template-part/editor.css |
559 B |
build/block-library/blocks/template-part/theme-rtl.css |
101 B |
build/block-library/blocks/template-part/theme.css |
101 B |
build/block-library/blocks/text-columns/editor-rtl.css |
95 B |
build/block-library/blocks/text-columns/editor.css |
95 B |
build/block-library/blocks/text-columns/style-rtl.css |
166 B |
build/block-library/blocks/text-columns/style.css |
166 B |
build/block-library/blocks/verse/style-rtl.css |
87 B |
build/block-library/blocks/verse/style.css |
87 B |
build/block-library/blocks/video/editor-rtl.css |
571 B |
build/block-library/blocks/video/editor.css |
572 B |
build/block-library/blocks/video/style-rtl.css |
173 B |
build/block-library/blocks/video/style.css |
173 B |
build/block-library/blocks/video/theme-rtl.css |
124 B |
build/block-library/blocks/video/theme.css |
124 B |
build/block-library/common-rtl.css |
815 B |
build/block-library/common.css |
812 B |
build/block-library/editor-rtl.css |
9.65 kB |
build/block-library/editor.css |
9.65 kB |
build/block-library/index.min.js |
148 kB |
build/block-library/reset-rtl.css |
474 B |
build/block-library/reset.css |
474 B |
build/block-library/style-rtl.css |
10.3 kB |
build/block-library/style.css |
10.3 kB |
build/block-library/theme-rtl.css |
665 B |
build/block-library/theme.css |
669 B |
build/block-serialization-default-parser/index.min.js |
1.09 kB |
build/block-serialization-spec-parser/index.min.js |
2.79 kB |
build/blocks/index.min.js |
46 kB |
build/components/index.min.js |
217 kB |
build/components/style-rtl.css |
15.3 kB |
build/components/style.css |
15.3 kB |
build/compose/index.min.js |
10.4 kB |
build/core-data/index.min.js |
12.4 kB |
build/customize-widgets/index.min.js |
11.2 kB |
build/customize-widgets/style-rtl.css |
1.5 kB |
build/customize-widgets/style.css |
1.49 kB |
build/data-controls/index.min.js |
614 B |
build/data/index.min.js |
7.1 kB |
build/date/index.min.js |
31.5 kB |
build/deprecated/index.min.js |
428 B |
build/dom-ready/index.min.js |
304 B |
build/dom/index.min.js |
4.46 kB |
build/edit-navigation/index.min.js |
15.4 kB |
build/edit-navigation/style-rtl.css |
3.76 kB |
build/edit-navigation/style.css |
3.76 kB |
build/edit-post/classic-rtl.css |
492 B |
build/edit-post/classic.css |
494 B |
build/edit-post/index.min.js |
29.3 kB |
build/edit-post/style-rtl.css |
7.22 kB |
build/edit-post/style.css |
7.22 kB |
build/edit-site/index.min.js |
30 kB |
build/edit-site/style-rtl.css |
5.56 kB |
build/edit-site/style.css |
5.56 kB |
build/edit-widgets/index.min.js |
15.8 kB |
build/edit-widgets/style-rtl.css |
4.12 kB |
build/edit-widgets/style.css |
4.13 kB |
build/editor/index.min.js |
37.5 kB |
build/editor/style-rtl.css |
3.78 kB |
build/editor/style.css |
3.77 kB |
build/element/index.min.js |
3.21 kB |
build/escape-html/index.min.js |
517 B |
build/format-library/index.min.js |
5.93 kB |
build/format-library/style-rtl.css |
571 B |
build/format-library/style.css |
571 B |
build/hooks/index.min.js |
1.55 kB |
build/html-entities/index.min.js |
424 B |
build/i18n/index.min.js |
3.6 kB |
build/is-shallow-equal/index.min.js |
501 B |
build/keyboard-shortcuts/index.min.js |
1.72 kB |
build/keycodes/index.min.js |
1.3 kB |
build/list-reusable-blocks/index.min.js |
1.85 kB |
build/list-reusable-blocks/style-rtl.css |
838 B |
build/list-reusable-blocks/style.css |
838 B |
build/media-utils/index.min.js |
2.92 kB |
build/notices/index.min.js |
845 B |
build/nux/index.min.js |
2.03 kB |
build/nux/style-rtl.css |
747 B |
build/nux/style.css |
743 B |
build/plugins/index.min.js |
1.83 kB |
build/primitives/index.min.js |
921 B |
build/priority-queue/index.min.js |
582 B |
build/react-i18n/index.min.js |
671 B |
build/redux-routine/index.min.js |
2.63 kB |
build/reusable-blocks/index.min.js |
2.19 kB |
build/reusable-blocks/style-rtl.css |
256 B |
build/reusable-blocks/style.css |
256 B |
build/rich-text/index.min.js |
10.6 kB |
build/server-side-render/index.min.js |
1.52 kB |
build/shortcode/index.min.js |
1.48 kB |
build/token-list/index.min.js |
562 B |
build/url/index.min.js |
1.74 kB |
build/viewport/index.min.js |
1.02 kB |
build/warning/index.min.js |
248 B |
build/widgets/index.min.js |
7.11 kB |
build/widgets/style-rtl.css |
1.16 kB |
build/widgets/style.css |
1.16 kB |
build/wordcount/index.min.js |
1.04 kB |
@Mamaduka @aristath I've tried with this and it still doesn't work. This is my setup:
I've also tried adding a |
@@ -255,4 +255,63 @@ function test_add_theme_supports_are_loaded_for_themes_without_theme_json() { | |||
$this->assertSame( $color_palette, $settings['color']['palette']['theme'] ); | |||
} | |||
|
|||
function test_merges_child_theme_json_into_parent_theme_json() { |
Thanks for this!
In #35759 I tweak a bit the test so that we test that single parts can be updated by the child while the untouched parent sections remain the same (the current tests checks that all the child sections override the parent).
@oandregal That's interesting. Let's create a separate issue for tracking. I'll try to have a look tomorrow morning. |
Created #35762 |
@Mamaduka In the previous version, the |
Hi, @briceduclos. Thanks for contributing! What's the use case for filtering the The reason I removed |
@Mamaduka Thanks for the reply. I've built a plugin that includes a setting that allows the user to select a different theme.json file to change the site configuration. |
@briceduclos, thanks for the additional details. @oandregal, do we have a different filter that plugins can use to override theme.json settings? |
Plugins can use the existing filters we use in the Gutenberg plugin, see #27504 (comment) There's been a few places in which specific filters for global styles have been brought up, but there's been no progress on that front yet. The first step is landing #34843 that adds an API to get data out from theme.json. |
Thanks, @oandregal! |
Description
If a theme has a parent theme, then this applies the child theme.json settings over the top of those for the parent theme.
Co-authored with @MaggieCabrera.
How has this been tested?
Checkout this PR: Automattic/themes#4807
The child theme behaves the same as before!
Types of changes
New feature (non-breaking change which adds functionality)
Checklist:
*.native.js
files for terms that need renaming or removal).The text was updated successfully, but these errors were encountered: