Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow template duplication + concept of active templates #67125

Open
wants to merge 9 commits into
base: trunk
Choose a base branch
from

Conversation

ellatrix
Copy link
Member

@ellatrix ellatrix commented Nov 19, 2024

Creating a new PR to squash all commits and preserve the history of #66951.

What?

Fixes #66950.

Why?

See above.

How?

  1. Separate the endpoints for user and static templates.
  2. A site setting active_templates that contains a maps of slugs to active template IDs. To disable default templates, it can be set to false.
  3. To retain existing behaviour of opening and editing theme templates, an auto-draft user template is created behind the scenes in case edits are made. If no edits are made this disappears. The active template is also set to the draft. If the user makes edits and wants to save it, changing active templates can be unticked in the multi-entity saving panel. There's potential to improve the UX here with this new paradigm.

Testing Instructions

  • Site Editor => Templates. Everything there. Check the front-end when switching active templates.
  • Editing the theme templates, e.g. at the root of the site editor.

Testing Instructions for Keyboard

Screenshots or screencast

⚠️ An additional "Active templates" view has been added since this video was recorded.

Screen.Recording.2024-11-13.at.09.20.16.mov

Copy link

github-actions bot commented Nov 19, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: ellatrix <[email protected]>
Co-authored-by: youknowriad <[email protected]>
Co-authored-by: draganescu <[email protected]>
Co-authored-by: Mamaduka <[email protected]>
Co-authored-by: ramonjd <[email protected]>
Co-authored-by: fabiankaegy <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: paaljoachim <[email protected]>
Co-authored-by: annezazu <[email protected]>
Co-authored-by: ntsekouras <[email protected]>
Co-authored-by: carlomanf <[email protected]>
Co-authored-by: mtias <[email protected]>
Co-authored-by: richtabor <[email protected]>
Co-authored-by: skorasaurus <[email protected]>
Co-authored-by: jordesign <[email protected]>
Co-authored-by: talldan <[email protected]>
Co-authored-by: mrfoxtalbot <[email protected]>
Co-authored-by: Andrew-Starr <[email protected]>
Co-authored-by: carolinan <[email protected]>
Co-authored-by: nerrad <[email protected]>
Co-authored-by: Aljullu <[email protected]>
Co-authored-by: sethrubenstein <[email protected]>
Co-authored-by: justintadlock <[email protected]>
Co-authored-by: erikjoling <[email protected]>
Co-authored-by: scruffian <[email protected]>
Co-authored-by: nickpagz <[email protected]>
Co-authored-by: liviopv <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@ellatrix ellatrix force-pushed the try/active-templates-2 branch from 9e9eafc to 1d75cf3 Compare November 19, 2024 17:05
@ellatrix ellatrix added [Type] Enhancement A suggestion for improvement. [Feature] Templates API Related to API powering block template functionality in the Site Editor labels Nov 19, 2024
@ellatrix ellatrix marked this pull request as draft November 19, 2024 17:06
Copy link

github-actions bot commented Nov 19, 2024

Size Change: +1.34 kB (+0.07%)

Total Size: 1.84 MB

Filename Size Change
build/core-commands/index.min.js 3.12 kB +21 B (+0.68%)
build/core-data/index.min.js 74.7 kB +359 B (+0.48%)
build/edit-post/index.min.js 13.4 kB +38 B (+0.28%)
build/edit-site/index.min.js 222 kB +787 B (+0.36%)
build/editor/index.min.js 115 kB +140 B (+0.12%)
ℹ️ View Unchanged
Filename Size
build-module/a11y/index.min.js 482 B
build-module/block-library/file/view.min.js 447 B
build-module/block-library/form/view.min.js 533 B
build-module/block-library/image/view.min.js 1.77 kB
build-module/block-library/navigation/view.min.js 1.16 kB
build-module/block-library/query/view.min.js 742 B
build-module/block-library/search/view.min.js 616 B
build-module/interactivity-router/index.min.js 2.55 kB
build-module/interactivity/debug.min.js 17.3 kB
build-module/interactivity/index.min.js 13.7 kB
build/a11y/index.min.js 952 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.26 kB
build/block-directory/style-rtl.css 1 kB
build/block-directory/style.css 1 kB
build/block-editor/content-rtl.css 4.47 kB
build/block-editor/content.css 4.46 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/index.min.js 260 kB
build/block-editor/style-rtl.css 15.8 kB
build/block-editor/style.css 15.8 kB
build/block-library/blocks/archives/editor-rtl.css 84 B
build/block-library/blocks/archives/editor.css 83 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 265 B
build/block-library/blocks/button/editor.css 265 B
build/block-library/blocks/button/style-rtl.css 555 B
build/block-library/blocks/button/style.css 555 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 345 B
build/block-library/blocks/buttons/style.css 345 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 B
build/block-library/blocks/categories/editor-rtl.css 132 B
build/block-library/blocks/categories/editor.css 131 B
build/block-library/blocks/categories/style-rtl.css 152 B
build/block-library/blocks/categories/style.css 152 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 139 B
build/block-library/blocks/code/style.css 139 B
build/block-library/blocks/code/theme-rtl.css 122 B
build/block-library/blocks/code/theme.css 122 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-author-name/style-rtl.css 72 B
build/block-library/blocks/comment-author-name/style.css 72 B
build/block-library/blocks/comment-content/style-rtl.css 120 B
build/block-library/blocks/comment-content/style.css 120 B
build/block-library/blocks/comment-date/style-rtl.css 65 B
build/block-library/blocks/comment-date/style.css 65 B
build/block-library/blocks/comment-edit-link/style-rtl.css 70 B
build/block-library/blocks/comment-edit-link/style.css 70 B
build/block-library/blocks/comment-reply-link/style-rtl.css 71 B
build/block-library/blocks/comment-reply-link/style.css 71 B
build/block-library/blocks/comment-template/style-rtl.css 191 B
build/block-library/blocks/comment-template/style.css 191 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 238 B
build/block-library/blocks/comments-pagination/editor.css 231 B
build/block-library/blocks/comments-pagination/style-rtl.css 245 B
build/block-library/blocks/comments-pagination/style.css 241 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 842 B
build/block-library/blocks/comments/editor.css 842 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 637 B
build/block-library/blocks/cover/editor-rtl.css 631 B
build/block-library/blocks/cover/editor.css 631 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 331 B
build/block-library/blocks/embed/editor.css 331 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 349 B
build/block-library/blocks/form-input/style.css 349 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 946 B
build/block-library/blocks/gallery/editor.css 951 B
build/block-library/blocks/gallery/style-rtl.css 1.83 kB
build/block-library/blocks/gallery/style.css 1.82 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 334 B
build/block-library/blocks/group/editor.css 334 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 799 B
build/block-library/blocks/image/editor.css 799 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 139 B
build/block-library/blocks/latest-posts/editor.css 138 B
build/block-library/blocks/latest-posts/style-rtl.css 520 B
build/block-library/blocks/latest-posts/style.css 520 B
build/block-library/blocks/list/style-rtl.css 107 B
build/block-library/blocks/list/style.css 107 B
build/block-library/blocks/loginout/style-rtl.css 61 B
build/block-library/blocks/loginout/style.css 61 B
build/block-library/blocks/media-text/editor-rtl.css 321 B
build/block-library/blocks/media-text/editor.css 320 B
build/block-library/blocks/media-text/style-rtl.css 552 B
build/block-library/blocks/media-text/style.css 550 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 644 B
build/block-library/blocks/navigation-link/editor.css 645 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.2 kB
build/block-library/blocks/navigation/editor.css 2.2 kB
build/block-library/blocks/navigation/style-rtl.css 2.24 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 B
build/block-library/blocks/page-list/style-rtl.css 192 B
build/block-library/blocks/page-list/style.css 192 B
build/block-library/blocks/paragraph/editor-rtl.css 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 B
build/block-library/blocks/post-author-biography/style-rtl.css 74 B
build/block-library/blocks/post-author-biography/style.css 74 B
build/block-library/blocks/post-author-name/style-rtl.css 69 B
build/block-library/blocks/post-author-name/style.css 69 B
build/block-library/blocks/post-author/editor-rtl.css 107 B
build/block-library/blocks/post-author/editor.css 107 B
build/block-library/blocks/post-author/style-rtl.css 188 B
build/block-library/blocks/post-author/style.css 189 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 527 B
build/block-library/blocks/post-comments-form/style.css 528 B
build/block-library/blocks/post-content/style-rtl.css 61 B
build/block-library/blocks/post-content/style.css 61 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 155 B
build/block-library/blocks/post-excerpt/style.css 155 B
build/block-library/blocks/post-featured-image/editor-rtl.css 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 347 B
build/block-library/blocks/post-featured-image/style.css 347 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/style-rtl.css 414 B
build/block-library/blocks/post-template/style.css 414 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 70 B
build/block-library/blocks/post-time-to-read/style.css 70 B
build/block-library/blocks/post-title/style-rtl.css 162 B
build/block-library/blocks/post-title/style.css 162 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 351 B
build/block-library/blocks/pullquote/style.css 350 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 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 154 B
build/block-library/blocks/query-pagination/editor.css 154 B
build/block-library/blocks/query-pagination/style-rtl.css 237 B
build/block-library/blocks/query-pagination/style.css 237 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query-total/style-rtl.css 64 B
build/block-library/blocks/query-total/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 527 B
build/block-library/blocks/query/editor.css 527 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 233 B
build/block-library/blocks/quote/theme.css 236 B
build/block-library/blocks/read-more/style-rtl.css 131 B
build/block-library/blocks/read-more/style.css 131 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 199 B
build/block-library/blocks/search/editor.css 199 B
build/block-library/blocks/search/style-rtl.css 660 B
build/block-library/blocks/search/style.css 658 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-tagline/style-rtl.css 65 B
build/block-library/blocks/site-tagline/style.css 65 B
build/block-library/blocks/site-title/editor-rtl.css 85 B
build/block-library/blocks/site-title/editor.css 85 B
build/block-library/blocks/site-title/style-rtl.css 143 B
build/block-library/blocks/site-title/style.css 143 B
build/block-library/blocks/social-link/editor-rtl.css 309 B
build/block-library/blocks/social-link/editor.css 309 B
build/block-library/blocks/social-links/editor-rtl.css 727 B
build/block-library/blocks/social-links/editor.css 724 B
build/block-library/blocks/social-links/style-rtl.css 1.51 kB
build/block-library/blocks/social-links/style.css 1.51 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 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-of-contents/style-rtl.css 83 B
build/block-library/blocks/table-of-contents/style.css 83 B
build/block-library/blocks/table/editor-rtl.css 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/editor-rtl.css 92 B
build/block-library/blocks/tag-cloud/editor.css 92 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 368 B
build/block-library/blocks/template-part/editor.css 368 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 126 B
build/block-library/blocks/term-description/style.css 126 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 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 441 B
build/block-library/blocks/video/editor.css 442 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.08 kB
build/block-library/common.css 1.08 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.7 kB
build/block-library/editor.css 11.7 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 225 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 15 kB
build/block-library/style.css 15 kB
build/block-library/theme-rtl.css 708 B
build/block-library/theme.css 712 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.6 kB
build/commands/index.min.js 16.2 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 229 kB
build/components/style-rtl.css 12.5 kB
build/components/style.css 12.5 kB
build/compose/index.min.js 12.8 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.44 kB
build/customize-widgets/style.css 1.44 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.69 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.67 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/style-rtl.css 2.75 kB
build/edit-post/style.css 2.75 kB
build/edit-site/posts-rtl.css 7.45 kB
build/edit-site/posts.css 7.45 kB
build/edit-site/style-rtl.css 13.6 kB
build/edit-site/style.css 13.6 kB
build/edit-widgets/index.min.js 17.6 kB
build/edit-widgets/style-rtl.css 4.07 kB
build/edit-widgets/style.css 4.08 kB
build/editor/style-rtl.css 9.29 kB
build/editor/style.css 9.29 kB
build/element/index.min.js 4.82 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.05 kB
build/format-library/style-rtl.css 476 B
build/format-library/style.css 476 B
build/hooks/index.min.js 1.65 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.13 kB
build/list-reusable-blocks/style-rtl.css 852 B
build/list-reusable-blocks/style.css 852 B
build/media-utils/index.min.js 3.61 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.62 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.37 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.86 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 554 B
build/preferences/style.css 554 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 978 B
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.55 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.3 kB
build/router/index.min.js 5.42 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.04 kB
build/token-list/index.min.js 581 B
build/upload-media/index.min.js 3.85 kB
build/url/index.min.js 3.9 kB
build/vendors/react-dom.min.js 41.7 kB
build/vendors/react-jsx-runtime.min.js 556 B
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 965 B
build/vips/index.min.js 36.2 kB
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

name === 'wp_template' &&
typeof key === 'string'
) {
name = '_wp_static_template';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the _ at the beginning necessary?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can change it to whatever we want. I was wondering though if we should make the endpoint private by making it a random path. But the post type can stay the same.

@@ -187,9 +296,13 @@ export default function PageTemplates() {
context: 'list',
} );
const editAction = useEditPostAction();
const setActiveTemplateAction = useSetActiveTemplateAction();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this action defined here and not in the "fields" package like all the other actions?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cause I didn't really know where they should be defined.

@ellatrix ellatrix force-pushed the try/active-templates-2 branch from 205296d to 0676add Compare November 21, 2024 15:17
Copy link

github-actions bot commented Nov 22, 2024

Flaky tests detected in 0cb1a2d.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/12558533055
📝 Reported issues:

@ellatrix ellatrix marked this pull request as ready for review November 22, 2024 08:54
@fabiankaegy
Copy link
Member

Pinging @WordPress/block-themers and @WordPress/outreach to get as many eyes on this as possible :) And help testing this would be much appreciated!

@youknowriad youknowriad added Needs Dev Note Requires a developer note for a major WordPress release cycle Needs User Documentation Needs new user documentation labels Nov 22, 2024
@youknowriad
Copy link
Contributor

Using 2025, I removed all my custom templates and I see this in the theme templates:

Screenshot 2024-11-22 at 10 28 22 AM

My understanding is that this one is marked "inactive" because it's not a "hierarchy" template, My feeling is that it doesn't mean entirely "inactive", it may be already assigned to some pages. So this raises two questions:

  • Should we show something else for this kind of templates?
  • This kind of templates don't show up in the "active templates" view. I think that's ok but I wonder if we should add a message there or something to clarify that "active templates" is about the "hierarchy template"

That said, It's not easy because "hierarchy" doesn't really mean anything to most users.

@youknowriad
Copy link
Contributor

youknowriad commented Nov 22, 2024

One possible option would be to consider these "custom page templates" as always active (you can't really disable them).

I noticed that right now, you can active/deactive them but it doesn't do anything really and they don't show up in "active templates" either.

@Mamaduka Mamaduka self-requested a review November 22, 2024 10:04
@ellatrix
Copy link
Member Author

ellatrix commented Nov 22, 2024

@youknowriad Yes, we should think about those.

Should we show something else for this kind of templates?

Maybe some in-between state. "Active on a page" would be a bit long. We're seem to be calling these elsewhere "for a specific item", so maybe a gold badge with "Specific"? Not sure. It would be good if you can hover over the badge and see more info.

This kind of templates don't show up in the "active templates" view. I think that's ok but I wonder if we should add a message there or something to clarify that "active templates" is about the "hierarchy template"

Yes, it's complex, because there's two scenarios: either you assign an existing template to be the page template. In which case the template in not active except for this specific page. Or you create a new specific template that has the slug page-${slug}, in which case the template is completely active since it can't be used for anything other than that page (unless you change the slug).

I think we should do something here in this PR, but there's probably some details left to figure out later.

@ellatrix
Copy link
Member Author

For example, one option is to deprecate page-${slug} templates and always make them page templates. But we'd need to change the template property of pages to work with IDs instead of slugs (like the active templates site option).

@youknowriad
Copy link
Contributor

I found myself missing a way to name the templates that I create. I believe we need to:

  • Ask the user to give a name to a template for the "create template" and "duplicate" actions.
  • Offer a way to rename in the inspector maybe or somewhere in the editor.

I think this is the kind of details that can be addressed in a follow-up though, once the whole mechanic and UX is agreed upon.

@jameskoster
Copy link
Contributor

This is very cool. Some initial observations:

After building this branch, a bunch of templates appeared in the 'Custom templates' section, many of which are duplicates of the same template. It's not clear why. Perhaps they're revisions? The point being that we should think about the upgrade process, expected results etc.

Something feels wrong with the logic around the active state of the Front Page template. I have one (several actually, see previous point) in 'Custom templates', but none of them are active. It doesn't appear in 'Active templates' either. It seems to be ignoring the template hierarchy, maybe that's intended? :)

I'm able to click into and 'edit' theme templates. Two issues around this; it's not clear what happens, I assume the template is duplicated, but is it also activated? It's inconsistent with theme patterns, which are entirely uneditable until duplicated. In general I think this part of the UX needs more thought, but for the initial implementation perhaps they should be consistent to help unify the concept?

Potentially a big can of worms, but communicating the template hierarchy in the UI is quite challenging :) As a provocation, and to define the scope of design, do we need to do that with custom templates? Theoretically could any template be assigned to any page? I suppose this relates to the previous point about the 'Front Page' template.

For $custom templates, I agree with @youknowriad that 'active' may not be the correct terminology. It's more like they're in use, or not. Maybe unassigned $custom templates have an 'Unassigned' badge? Though having written that it's not clear to me that users would pick up on the distinction :) Could be a detail to revisit later.

The page-${slug} templates are also tricky. If they can be activated/deactivated then this concept of term specific templates doesn't feel very practical. It might be easier to create a generic template and assign it manually? This probably applies to the Front Page template too... in this case it's basically just the same as any other page template?

A couple of very small points on the design;

  • The 'Active' badges look like primary buttons. Should we copy the styling from the 'Synced' badges on the Patterns page for now (maybe using the admin theme color rather than purple), then revise later once a Badge component has been implemented (Convert to component: Badge #61106)?
  • We have 'My Patterns' and 'Custom Templates' which are essentially the same thing, we should probably align these labels around one or the other; 'Custom' or 'My'. I lean towards the former.

@youknowriad
Copy link
Contributor

After building this branch, a bunch of templates appeared in the 'Custom templates' section, many of which are duplicates of the same template. It's not clear why. Perhaps they're revisions? The point being that we should think about the upgrade process, expected results etc.

That is weird, it shouldn't be happening since you can only have one custom template per "hierarchy slug" in trunk. I wonder if you had some lingering broken templates (that were hidden in trunk) from very old branches or something.

Something feels wrong with the logic around the active state of the Front Page template. I have one (several actually, see previous point) in 'Custom templates', but none of them are active. It doesn't appear in 'Active templates' either. It seems to be ignoring the template hierarchy, maybe that's intended? :)

I think it probably relates to the previous point. I think upon upgrade, all user templates should be "active" by default.

I'm able to click into and 'edit' theme templates. Two issues around this; it's not clear what happens, I assume the template is duplicated, but is it also activated? It's inconsistent with theme patterns, which are entirely uneditable until duplicated. In general I think this part of the UX needs more thought, but for the initial implementation perhaps they should be consistent to help unify the concept?

I agree, I think for me the ideal is to be explicit about what's happening (no edit) but there are some challenges with that:

  • We can switch to "template editing" from the "template inspector control" of a post or a page (should it say "duplicate" there when it's a theme template)?
  • The home page of the site editor allows you to click the preview to "edit" the front page or front page templates, should it trigger a modal or something to ask you to duplicate when it's a "theme template" still?

@@ -170,7 +171,7 @@ const getNavigationCommandLoaderPerTemplate = ( templateType ) =>
return {
isBlockBasedTheme:
select( coreStore ).getCurrentTheme()?.is_block_theme,
canCreateTemplate: select( coreStore ).canUser( 'create', {
canCreateTemplate: select( coreStore ).canUser( 'read', {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did we change the perm? Seems natural to check for create in canCreate...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? The commands are meant to navigate to templates, not create new templates?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But yes this variable should be renamed 😃

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that using the create capability check here is odd but necessary. Users who can read templates might not have access to the Site Editor.

See #60317 (comment).

P.S. We should extract similar minor and unrelated fixes into separate PRs. There's already a lot going on here and that would make reviewing bit easier.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then this check should be called differently and we should use something else to check if the user has access to the site editor. This is not a good proxy for checking site editor access, it is more restrictive now. Also we should then use it as a condition to prevent all site editor commands from loading?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also we should then use it as a condition to prevent all site editor commands from loading?

It's hard to generalize it. The Site Editor needs more granular capability checks, but those should be mapped out separately - maybe even incorporated into the router.

As I mentioned, I would remove and extract similar fixes into separate PRs.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, here the change is necessary because you cannot create static templates through the endpoint, you can only create custom templates.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I guess we need another additional check, not sure what

Copy link

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Unlinked Accounts

The following contributors have not linked their GitHub and WordPress.org accounts: @erikjoling.

Contributors, please read how to link your accounts to ensure your work is properly credited in WordPress releases.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Unlinked contributors: erikjoling.

Co-authored-by: ellatrix <[email protected]>
Co-authored-by: youknowriad <[email protected]>
Co-authored-by: draganescu <[email protected]>
Co-authored-by: fabiankaegy <[email protected]>
Co-authored-by: jameskoster <[email protected]>
Co-authored-by: carlomanf <[email protected]>
Co-authored-by: mtias <[email protected]>
Co-authored-by: annezazu <[email protected]>
Co-authored-by: richtabor <[email protected]>
Co-authored-by: skorasaurus <[email protected]>
Co-authored-by: jordesign <[email protected]>
Co-authored-by: talldan <[email protected]>
Co-authored-by: ramonjd <[email protected]>
Co-authored-by: mrfoxtalbot <[email protected]>
Co-authored-by: Andrew-Starr <[email protected]>
Co-authored-by: carolinan <[email protected]>
Co-authored-by: nerrad <[email protected]>
Co-authored-by: Aljullu <[email protected]>
Co-authored-by: sethrubenstein <[email protected]>
Co-authored-by: justintadlock <[email protected]>
Co-authored-by: scruffian <[email protected]>
Co-authored-by: nickpagz <[email protected]>
Co-authored-by: liviopv <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@ntsekouras
Copy link
Contributor

Thank you Ella! I did some quick testing:

  1. Before checking out this PR, I had some specific templates like tag-xxxx which were now inactive. I'd expect to preserve previous created templates as active.
  2. I'd expect the Active templates view to have both theme and custom active templates.
  3. When creating extra templates (ex. Front Page), how can we rename? When creating multiple templates of the same slug they have the same name in lists.
  4. I also tried creating a template that also exists in the theme and the naming issue was (3) there too. Additionally when I saved it the author info we show in the lists is the theme and not the user.

@ellatrix ellatrix force-pushed the try/active-templates-2 branch 3 times, most recently from 9b8d5bd to b0537eb Compare November 29, 2024 14:06
@ellatrix ellatrix changed the title Templates: allow templates to be activated and deactivated Templates: template duplication + concept of active templates Nov 29, 2024
@ellatrix ellatrix changed the title Templates: template duplication + concept of active templates Allow template duplication + concept of active templates Nov 29, 2024
@ellatrix ellatrix force-pushed the try/active-templates-2 branch from b0537eb to 2b0264c Compare December 30, 2024 10:47
@ellatrix ellatrix force-pushed the try/active-templates-2 branch from 7f3f955 to 458a82f Compare December 30, 2024 12:39
@ellatrix
Copy link
Member Author

ellatrix commented Dec 30, 2024

Before checking out this PR, I had some specific templates like tag-xxxx which were now inactive. I'd expect to preserve previous created templates as active.

Fixed with the migration.

When creating extra templates (ex. Front Page), how can we rename?

Added renaming.

I also tried creating a template that also exists in the theme and the naming issue was (3) there too. Additionally when I saved it the author info we show in the lists is the theme and not the user.

You mean viewing the theme's template, then modifying and saving? Yes, it will take over the theme as the author. I think that's fine? Can be changed later if needed.

@ellatrix
Copy link
Member Author

Worth mentioning:

  • In the future, it should not be possible to activate custom templates that don't match the page-${ slug } type of patterns. I left this out because I don't think we currently have any way to parse these in the editor.
  • In the future, when a custom template has a slug that still fits in the hierarchy, we should label it with a "pretty" name.
  • Perhaps when the page (or whatever object) that the template is targeting through this pattern does not not exist, we should add a label.
  • We should also add a label whenever a custom template is used by any objects.

@ellatrix
Copy link
Member Author

I left these things out for now because I think it's all polish and not essential, and to keep this PR as small as possible.

@ellatrix
Copy link
Member Author

To clarify the above comments, there are in my understanding 3 types of templates:

  • Slugs like home, page, front-page, category, etc. These can active, but also selected by specific page (or objects generally).
  • Slugs like page-${ slug }, category-${ slug }, etc. These can also be active for specific slug, but at the same time also selected for other pages or objects. Some themes like TT4 actually created more confusion here: it provides page-wide and page-with-sidebar as alternative templates to select for specific pages, but at the same time it also sets a template for specific slugs. With this PR the user can actually disable the latter behaviour by deactivating it.
  • Slugs that are random and don't fit in the hierarchy (or perhaps is left blank by the user). It should not be possible to activate these, since it won't do anything. But you can select them for specific pages.

So imo, when adding it in the future, the "Used" (or whatever) label will have to be separate from the "Active" label, and we might need to improve the wording.

@youknowriad
Copy link
Contributor

youknowriad commented Dec 30, 2024

Slugs that are random and don't fit in the hierarchy (or perhaps is left blank by the user). It should not be possible to activate these, since it won't do anything. But you can select them for specific pages.

Maybe deactivating these means, you can't actually select them and if they were selected, they get ignored by the rendering algorithm?

So for a "theme" provided one, it's the same behavior as "deleting the file".

@ellatrix
Copy link
Member Author

Maybe deactivating these means, you can't actually select them and if they were selected, they get ignored by the rendering algorithm?

You mean they are ignored by even if they are used by specific pages? But then that also means that deactivating other kinds of templates can mean two things: deactivate in the hierarchy and deactivate for specific pages.

Perhaps when clicking "deactivate", in the future there should be a modal with checkboxes where you can fine tune it.

@ellatrix ellatrix added this to the Gutenberg 20.0 milestone Dec 31, 2024
@ellatrix ellatrix added [Release] Do Not Punt Used to indicate the issue or pull request must not be moved from the assigned milestone and removed [Release] Do Not Punt Used to indicate the issue or pull request must not be moved from the assigned milestone labels Dec 31, 2024
@ellatrix
Copy link
Member Author

ellatrix commented Jan 1, 2025

I'd love to get this merged, but let's see more opinions on it. I think most bugs and issues will come from things that weren't previously possible before, so honestly I don't think it's a big deal.

@youknowriad
Copy link
Contributor

You mean they are ignored by even if they are used by specific pages? But then that also means that deactivating other kinds of templates can mean two things: deactivate in the hierarchy and deactivate for specific pages.

I feel like the simplest for users would be to just "always disable for everything" (hierarchy and specific pages) regardless of template.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Templates API Related to API powering block template functionality in the Site Editor Needs Dev Note Requires a developer note for a major WordPress release cycle Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
10 participants