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

Update: Make template names and descriptions dynamic. #43862

Merged
merged 1 commit into from
Sep 21, 2022

Conversation

jorgefilipecosta
Copy link
Member

@jorgefilipecosta jorgefilipecosta commented Sep 5, 2022

Fixes: #42894
Makes template names and descriptions of the author, page, single, tag, category, and taxonomy dynamic.

What?

Currently, we are storing stating names and descriptions in templates based on the title or name of the underlying entity at a given moment. That approach is not ideal if the user changes titles or names, the templates keep the old titles which may become very confusing.
This PR fixes the issue by making template titles and descriptions dynamic and computed on the server.

How?

When creating a new template for the author, single, tag, category, and taxonomy, instead of specifying a title and a description, we fill the slug as the title and keep the description empty.
On the server template object building, we added logic that when the template title equals the slug or is empty and the description is empty, we dynamically compute a human-friendly title and description.
We are making the title equal to the slug instead of being empty because there is logic to disallowing creating posts with an empty title description and content. If there was no fallback content on the template and the title was empty, it would fall under these rules, and the creation would fail.

Testing Instructions

Created a template specific for a post, a tag, a category, a custom taxonomy term, and an author.
Changed the titles of the post, tag, category, custom taxonomy term, and author, and verified the template title and description also updated.

@github-actions
Copy link

github-actions bot commented Sep 5, 2022

Size Change: -382 B (0%)

Total Size: 1.26 MB

Filename Size Change
build/edit-site/index.min.js 57.6 kB -382 B (-1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.05 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
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 163 kB
build/block-editor/style-rtl.css 15.4 kB
build/block-editor/style.css 15.4 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 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 84 B
build/block-library/blocks/avatar/style.css 84 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 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 523 B
build/block-library/blocks/button/style.css 523 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 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 100 B
build/block-library/blocks/categories/style.css 100 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 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 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 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 187 B
build/block-library/blocks/comment-template/style.css 185 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 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 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 605 B
build/block-library/blocks/cover/editor.css 607 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 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 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 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 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 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 337 B
build/block-library/blocks/group/editor.css 337 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 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 876 B
build/block-library/blocks/image/editor.css 873 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 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 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 507 B
build/block-library/blocks/media-text/style.css 505 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation-submenu/view.min.js 423 B
build/block-library/blocks/navigation/editor-rtl.css 1.99 kB
build/block-library/blocks/navigation/editor.css 2 kB
build/block-library/blocks/navigation/style-rtl.css 2.17 kB
build/block-library/blocks/navigation/style.css 2.16 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
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 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 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/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 493 B
build/block-library/blocks/post-comments-form/style.css 493 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 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 547 B
build/block-library/blocks/post-featured-image/editor.css 545 B
build/block-library/blocks/post-featured-image/style-rtl.css 315 B
build/block-library/blocks/post-featured-image/style.css 315 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 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 282 B
build/block-library/blocks/post-template/style.css 282 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 100 B
build/block-library/blocks/post-title/style.css 100 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 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 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 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 282 B
build/block-library/blocks/query-pagination/style.css 278 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 439 B
build/block-library/blocks/query/editor.css 439 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 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 409 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 488 B
build/block-library/blocks/site-logo/editor.css 488 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 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 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/tag-cloud/style-rtl.css 239 B
build/block-library/blocks/tag-cloud/style.css 239 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 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 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 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 kB
build/block-library/editor.css 11 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 190 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.2 kB
build/block-library/style.css 12.2 kB
build/block-library/theme-rtl.css 719 B
build/block-library/theme.css 722 B
build/block-serialization-default-parser/index.min.js 1.1 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.8 kB
build/components/index.min.js 198 kB
build/components/style-rtl.css 11.4 kB
build/components/style.css 11.5 kB
build/compose/index.min.js 12.5 kB
build/core-data/index.min.js 15.5 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 8.08 kB
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 30.8 kB
build/edit-post/style-rtl.css 6.94 kB
build/edit-post/style.css 6.94 kB
build/edit-site/style-rtl.css 8.36 kB
build/edit-site/style.css 8.34 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/index.min.js 41.6 kB
build/editor/style-rtl.css 3.62 kB
build/editor/style.css 3.61 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 6.76 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.83 kB
build/list-reusable-blocks/index.min.js 1.74 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 953 B
build/nux/index.min.js 2.05 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 B
build/priority-queue/index.min.js 1.58 kB
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.74 kB
build/reusable-blocks/index.min.js 2.21 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.61 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.45 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@jorgefilipecosta jorgefilipecosta added [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") [Type] Enhancement A suggestion for improvement. [Type] Bug An existing feature does not function as intended labels Sep 5, 2022
@jorgefilipecosta jorgefilipecosta force-pushed the add/dynamic-template-names branch 5 times, most recently from a941a8b to d27b917 Compare September 6, 2022 11:57
@jameskoster
Copy link
Contributor

jameskoster commented Sep 7, 2022

Hmm, this didn't work as expected for me. After updating my 'Category 20' to 'Category 30', the template name seemed to revert to a slug:

Screenshot 2022-09-07 at 09 55 25

It doesn't look like the template is associated with the category any more either as I am able to create a new template for that category:

Screenshot 2022-09-07 at 09 56 34

I'm not sure if it's relevant, but noting that I'd already created a template for this category before checking out this PR.

Edit: Seems to be very relevant. If I create a new category on this branch, then create a template, then update the category name, then the template name updates as expected. Do we need to account for existing templates?

Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Thanks for your work here Jorge! This seems to work quite well for now, but all the regex stuff are a bit tricky.

Do we need to account for existing templates?

I think we can avoid that, but 🤷

break;
case 'single':
$single_matches = array();
$regex = '/(' . implode( '|', array_values( get_post_types() ) ) . ')-(.+)/';
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this is problematic if we have post types that could contain in their slug part of other post types - example CPT post-something would be mixed with post.

Copy link
Member Author

Choose a reason for hiding this comment

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

I updated the logic now we try all combination until we find a referenced entity (if we can).

break;
case 'taxonomy':
$taxonomy_matches = array();
if ( preg_match( '/(' . implode( '|', array_values( get_taxonomies() ) ) . ')-(.+)/', $slug_remaining, $taxonomy_matches ) ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

We probably have the same issue with the post types I commented about.

switch ( $type ) {
case 'author':
$nice_name = $slug_remaining;
$users = get_users(
Copy link
Contributor

Choose a reason for hiding this comment

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

I haven't checked the query well here, but in my testing when I updated a nicename of a contributor user, it didn't find the user.. Can you reproduce?

Copy link
Member Author

Choose a reason for hiding this comment

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

Issue fixed 👍

@jameskoster
Copy link
Contributor

I think we can avoid that, but 🤷

Probably fine since this feature isn't in production yet.

@jorgefilipecosta jorgefilipecosta force-pushed the add/dynamic-template-names branch 2 times, most recently from df56b04 to abc648d Compare September 8, 2022 12:21
@jorgefilipecosta
Copy link
Member Author

Hi @ntsekouras, @jameskoster thank you for the reviews.
All the feedback was applied.

I guess for existing templates, we should not do anything. Making the titles and descriptions dynamic for templates created before this change would mean totally ignoring explicitly stored titles and descriptions, making what is stored in the database useless. I don't think we should do that, may in the future these fields will be needed for custom names etc.
So to be clear this PR makes titles and descriptions dynamic for templates created after it is merged.

@jameskoster
Copy link
Contributor

Yeah that sounds okay to me. Everything is working for me, so pending code review let's get this in! :)

Copy link
Contributor

@anton-vlasenko anton-vlasenko left a comment

Choose a reason for hiding this comment

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

I've found a couple of minor issues.
Thanks.

lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
*
* @param string $taxonomy Idenfitier of the taxonomy e.g:category.
* @param string $slug Slug of the term e.g:shoes.
* @param Gutenberg_Block_Template $template Template whose description and title are going to be computed.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
* @param Gutenberg_Block_Template $template Template whose description and title are going to be computed.
* @param WP_Block_Template $template Template whose description and title are going to be computed.

lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
lib/compat/wordpress-6.1/block-template-utils.php Outdated Show resolved Hide resolved
@jorgefilipecosta jorgefilipecosta added the Needs PHP backport Needs PHP backport to Core label Sep 21, 2022
@jorgefilipecosta jorgefilipecosta force-pushed the add/dynamic-template-names branch 4 times, most recently from a1a75e1 to 74e63b2 Compare September 21, 2022 14:22
Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Thanks for your work Jorge! I tested many scenarios, including my initial comments about a post type that could start with a different one(ex post and post-something) and everything seems to work well! 👏

I've left a couple of nits and we can ship.

if ( empty( $posts ) ) {
$template->title = sprintf(
// translators: Represents the title of a user's custom template in the Site Editor referencing a deleted post, where %1$s is the singular name of a post type and %2$s is the slug of the deleted post, e.g. "Deleted: Page(hello)".
__( 'Deleted: %1$s(%2$s)', 'gutenberg' ),
Copy link
Contributor

Choose a reason for hiding this comment

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

Since we're using the slug, this message will be also shown if a user updates the slug. I think these are more edge cases, but it might make sense to update to Not found or something? 🤔

@ntsekouras ntsekouras dismissed anton-vlasenko’s stale review September 21, 2022 14:41

Thanks for the review Anton! All your suggestions were applied.

@ockham
Copy link
Contributor

ockham commented Sep 26, 2022

I just cherry-picked this PR to the wp/6.1 branch to get it included in the next release: 6680737

@ockham ockham removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Sep 26, 2022
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 27, 2022
After discussions with the Editor Tech leads for 6.1(@bernhard-reiter, @cbravobernal, and @ndiego) and additional guidance from @hellofromtonya, the decision has been made to exclude [WordPress/gutenberg#43862 Gutenberg PR #43862] from the pre-Beta 2 Gutenberg sync PR and revert [54280]. Why? [54280] added the feature's PHP code, but the JS package updates were not included before feature freeze(Beta 1), meaning the feature was incomplete. As the PHP code does not work without the JS package update, the feature is incomplete and missed the feature freeze deadline.

Leaving the PHP code was discussed. However, there is a risk of it needing to change which could complicate backwards compatibility in 6.2 when the feature is eventually introduced.

Follow-up to [54280].

Props hellofromTonya, bernhard-reiter, cbravobernal.
See #56467.

git-svn-id: https://develop.svn.wordpress.org/trunk@54333 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Sep 27, 2022
After discussions with the Editor Tech leads for 6.1(@bernhard-reiter, @cbravobernal, and @ndiego) and additional guidance from @hellofromtonya, the decision has been made to exclude [WordPress/gutenberg#43862 Gutenberg PR #43862] from the pre-Beta 2 Gutenberg sync PR and revert [54280]. Why? [54280] added the feature's PHP code, but the JS package updates were not included before feature freeze(Beta 1), meaning the feature was incomplete. As the PHP code does not work without the JS package update, the feature is incomplete and missed the feature freeze deadline.

Leaving the PHP code was discussed. However, there is a risk of it needing to change which could complicate backwards compatibility in 6.2 when the feature is eventually introduced.

Follow-up to [54280].

Props hellofromTonya, bernhard-reiter, cbravobernal.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54333


git-svn-id: http://core.svn.wordpress.org/trunk@53892 1a063a9b-81f0-0310-95a4-ce76da25c4cd
ockham added a commit that referenced this pull request Sep 27, 2022
@ockham
Copy link
Contributor

ockham commented Sep 27, 2022

I just cherry-picked this PR to the wp/6.1 branch to get it included in the next release: 6680737

Update: I reverted this on the wp/6.1 branch (174fe66). See this discussion in Core Slack for the rationale.

github-actions bot pushed a commit to platformsh/wordpress-performance that referenced this pull request Sep 27, 2022
After discussions with the Editor Tech leads for 6.1(@bernhard-reiter, @cbravobernal, and @ndiego) and additional guidance from @hellofromtonya, the decision has been made to exclude [WordPress/gutenberg#43862 Gutenberg PR #43862] from the pre-Beta 2 Gutenberg sync PR and revert [54280]. Why? [54280] added the feature's PHP code, but the JS package updates were not included before feature freeze(Beta 1), meaning the feature was incomplete. As the PHP code does not work without the JS package update, the feature is incomplete and missed the feature freeze deadline.

Leaving the PHP code was discussed. However, there is a risk of it needing to change which could complicate backwards compatibility in 6.2 when the feature is eventually introduced.

Follow-up to [54280].

Props hellofromTonya, bernhard-reiter, cbravobernal.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54333


git-svn-id: https://core.svn.wordpress.org/trunk@53892 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@jameskoster
Copy link
Contributor

Won't there be backwards compatibility issues for folks who create (specific) templates between 6.1 and 6.2 if we leave this out? 🤔

@ntsekouras
Copy link
Contributor

I can't understand why we didn't include this with the next packages update and keep the backport. This is more like a bug than an enhancement. It would be good to have this for 6.1.

@annezazu
Copy link
Contributor

cc @priethor and @desrosj for awareness.

@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Sep 29, 2022

I agree with what @ntsekouras said. This PR is not a feature; it is a bug fix, and we labeled it as such.
The bug is when the title of an entity like a post changes, the templates still reference the old title. This PR fixes the bug and ensures the template's title also gets updated. If we don't include it in 6.1, we can fix it in 6.2, but all the templates created during 6.1 will have static names that will not change because they are persisted in the database.

@priethor priethor removed the [Type] Enhancement A suggestion for improvement. label Sep 29, 2022
@priethor
Copy link
Contributor

I also agree with @ntsekouras and @jorgefilipecosta . This issue will likely cause bug reports (or, at least, confusion) when users rename their template and the old one is still being referenced. Even if this gets fixed later for 6.2, the stored data will still reference the wrong name, so I think it should be considered a bug.

@ockham @ndiego, do you have more context on what led to consider this enhancement?

@ndiego
Copy link
Member

ndiego commented Sep 29, 2022

@priethor I missed this discussion, but agree this is a bug. I can see how it can be thought of as an "enhancement", but it is also fixing a bug and can have a long-term impact.

@ockham
Copy link
Contributor

ockham commented Sep 29, 2022

@ockham @ndiego, do you have more context on what led to consider this enhancement?

It was considered an incomplete feature rather than a bugfix, since the JS code (util.js) changes weren't included in Beta 1.

Looping in @dream-encode and @hellofromtonya who discussed this with me -- in case y'all are open to re-considering 😊

@dream-encode
Copy link

dream-encode commented Sep 29, 2022

@jorgefilipecosta @ockham @jameskoster @ntsekouras @priethor

Thanks for the ping. I am open to reconsidering this for inclusion if this is truly a bug fixing unintended behavior already in trunk, but I have a question that @desrosj posed regarding the theme supports PR from yesterday.

  1. How does this currently function in 6.0? Is it not currently functional?

Thanks in advance for the additional context!

@jameskoster
Copy link
Contributor

How does this currently function in 6.0? Is it not currently functional?

In 6.0 it's not possible to create templates for specific entities. So the issue this PR addressed doesn't exist in production, only in the Gutenberg plugin. We can consider it a part of #37407.

@dream-encode
Copy link

@jameskoster Thanks!

In chatting with @hellofromtonya and revisiting our thought process a couple of days ago in our review.

Following the breadcrumb trail, this issue appears to be directly tied to #42894. That itself is an Enhancement stemming from #42165.

#42894 seeks to improve the template naming to prevent "confusion". However, unless we're missing something, I don't know that this addresses any broken functionality.

Our interpretation from the Core side is that this was an incomplete feature. Reverting the PHP part of this PR removed unused code that was not actually consumed by the Editor after 6.1 Beta 1 was released.

Finally, there could be a case for removing the feature in #42165 and any follow-ups if the feature is deemed not fully functional after Beta 1. We've not entertained that as yet, as we respect the hard work done on the feature that was merged in time for the Beta phase, and, in reading the trail of PRs, it seems usable without this enhancement.

@jorgefilipecosta
Copy link
Member Author

jorgefilipecosta commented Sep 30, 2022

Hi @dream-encode,

#42894 is marked as an enhancement, but I think it should be considered a bug, not an enhancement (this PR was labeled a bug since the creation).

#42894 seeks to improve the template naming to prevent "confusion". However, unless we're missing something, I don't know that this addresses any broken functionality.

If, when changing the title of the post, the post list still displayed the old title, and no update happened, I guess we would consider that a bug, right?
This PR just fixes a similar bug and broken functionality. When I change the title of a post, e.g., because the title of the post was something considered offensive, on the template list, the template of that post still displays the old title, e.g., something offensive, and there is no way to change that title. To me, that's broken functionality, and the PR fixes that. During the beta phase and even RC, we can include bug fixes for features introduced in a version, and this seems to be a bug fix to a feature that was introduced in 6.1 (the ability for entity-specific templates). The bug is template titles remain unchanged even after the user updates the title of the entity they reference.

Finally, there could be a case for removing the feature in #42165 and any follow-ups if the feature is deemed not fully functional after Beta 1. We've not entertained that as yet, as we respect the hard work done on the feature that was merged in time for the Beta phase, and, in reading the trail of PRs, it seems usable without this enhancement.

That PR is just one of the PRs of the feature, the feature encompasses many PRs for different entities and UI's and is deeply entrenched in the codebase. Removing the feature does not seems to be a good path. During the removal probably, more issues would be introduced. If we don't interpret this PR as a bug, we should leave things as they are and fix the problem in the next version.

@dream-encode
Copy link

@jorgefilipecosta Thanks for the response! One thing to clarify is that this PR was marked as both enhancement and a bug, and I think I understand why now.

If updating the post name doesn't update the template name, and that was the intended behavior all along, that is indeed a bug. However, I think this could've been considered "feature incomplete" when multiple templates for similar types was added. At best, this is straddling the line between bug and enhancement. I don't think there's any back-compat issues, as suggested above, as if this were to ship later, the templates added in the period before this merge would function just fine, even if their names were the same.

That being said, your explanation has given me additional context and while re-reviewing the trace up issues leading to this, I think this improvement is one I'm willing to support as a "quality of life"/UX "fix" during Beta.

I'm going to suggest some edits to the PR to bring it inline with the code reverted a few days ago and improve the docblocks for the new functions.

Once the PR is ready, I am happy to merge this. I would just request a final confirmation from @ntsekouras and @jameskoster that tests in its final form yielded the expected results.

CC @hellofromtonya

Copy link

@dream-encode dream-encode left a comment

Choose a reason for hiding this comment

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

I think I covered all the unique issues I see, but I want to also point to the original core merge r54280 to ensure all the tweaks there make it back to this PR as well.

* @param string $post_type Post type e.g.: page, post, product.
* @param string $slug Slug of the post e.g.: a-story-about-shoes.
* @param WP_Block_Template $template Template to mutate adding the description and title computed.
*

Choose a reason for hiding this comment

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

Remove this extra line between params and return.

* Builds the title and description of a post specific template based on the underlying referenced post.
* Mutates the underlying template object.
*
* @access private

Choose a reason for hiding this comment

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

Add a @since 6.1.0 above the access.

*
* @return boolean Returns true if the referenced post was found and false otherwise.
*/
function _gutenberg_build_title_and_description_for_single_post_type_block_template( $post_type, $slug, WP_Block_Template $template ) {

Choose a reason for hiding this comment

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

Update the function prefixes from gutenberg to wp.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think the prefix has to be renamed in the backport PR, not the Gutenberg PR. This function will disappear from Gutenberg code when the minimum WP version for Gutenberg increases to 6.2

@@ -248,6 +248,136 @@ function gutenberg_get_block_template( $id, $template_type = 'wp_template' ) {
return apply_filters( 'get_block_template', $block_template, $id, $template_type );
}

/**
* Builds the title and description of a post specific template based on the underlying referenced post.

Choose a reason for hiding this comment

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

"post-specific"

if ( empty( $posts ) ) {
$template->title = sprintf(
// translators: Represents the title of a user's custom template in the Site Editor referencing a post that was not found, where %1$s is the singular name of a post type and %2$s is the slug of the deleted post, e.g. "Not found: Page(hello)".
__( 'Not found: %1$s(%2$s)', 'gutenberg' ),

Choose a reason for hiding this comment

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

Remove the gutenberg domain, as this will fallback to Core domain.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think the domain has to be removed in the backport PR, not the Gutenberg PR. This function will disappear from Gutenberg code when the minimum WP version for Gutenberg increases to 6.2

);
$template->description = sprintf(
// translators: Represents the description of a user's custom template in the Site Editor, e.g. "Template for Page: Hello".
__( 'Template for %1$s', 'gutenberg' ),

Choose a reason for hiding this comment

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

I think this can be just %s since there's only one replacement.

}

/**
* Builds the title and description of a taxonomy specific template based on the underlying entity referenced.

Choose a reason for hiding this comment

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

"taxonomy-specific"

* Builds the title and description of a taxonomy specific template based on the underlying entity referenced.
* Mutates the underlying template object.
*
* @access private

Choose a reason for hiding this comment

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

Add @since 6.1.0

* @param string $slug Slug of the term, e.g.: shoes.
* @param WP_Block_Template $template Template to mutate adding the description and title computed.
*
* @return boolean True if an term referenced was found and false otherwise.

Choose a reason for hiding this comment

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

"an term" -> "a term"

);
if ( count( $users_with_same_name ) > 1 ) {
$template->title = sprintf(
// translators: Represents the title of a user's custom template in the Site Editor, where %1$s is the template title of an author template and %2$s is the nicename of the author, e.g. "Author: Jorge (jorge-costa)".

Choose a reason for hiding this comment

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

I think we want to change the example author here to something anonymous, like the other references.

Let's use "Jane Doe (jane-doe)"

ockham pushed a commit that referenced this pull request Oct 4, 2022
* Revert "Revert "Update: Make template names and descriptions dynamic. (#43862)""

This reverts commit 174fe66.

* Address review comments
ootwch pushed a commit to ootwch/wordpress-develop that referenced this pull request Nov 4, 2022
Backports PHP changes in WordPress/gutenberg#43862 to the core. Adds a mechanism to dynamically compute names and descriptions of the author, page, single, tag, category, and taxonomy templates.

Props mcsf, ntsekouras, antonvlasenko, jameskoster.
See #56467.

git-svn-id: https://develop.svn.wordpress.org/trunk@54280 602fd350-edb4-49c9-b593-d223f7449a82
ootwch pushed a commit to ootwch/wordpress-develop that referenced this pull request Nov 4, 2022
After discussions with the Editor Tech leads for 6.1(@bernhard-reiter, @cbravobernal, and @ndiego) and additional guidance from @hellofromtonya, the decision has been made to exclude [WordPress/gutenberg#43862 Gutenberg PR #43862] from the pre-Beta 2 Gutenberg sync PR and revert [54280]. Why? [54280] added the feature's PHP code, but the JS package updates were not included before feature freeze(Beta 1), meaning the feature was incomplete. As the PHP code does not work without the JS package update, the feature is incomplete and missed the feature freeze deadline.

Leaving the PHP code was discussed. However, there is a risk of it needing to change which could complicate backwards compatibility in 6.2 when the feature is eventually introduced.

Follow-up to [54280].

Props hellofromTonya, bernhard-reiter, cbravobernal.
See #56467.

git-svn-id: https://develop.svn.wordpress.org/trunk@54333 602fd350-edb4-49c9-b593-d223f7449a82
@ramonjd ramonjd removed the Needs PHP backport Needs PHP backport to Core label Jun 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") [Type] Bug An existing feature does not function as intended
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

Template names for specific entities can get confusing when the entity is renamed