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

Comments block: Change ID to core/comments #40506

Merged
merged 15 commits into from
Jul 7, 2022

Conversation

cbravobernal
Copy link
Contributor

@cbravobernal cbravobernal commented Apr 21, 2022

Left as a draft to have some feedback about the rename first, the options we have are:

  • Leave it as is ( is not a Query Loop yet)
  • Rename it (inconsistency between ID - class, and the rest of the name on the interface, folders, etc). We cannot update the block name, as has been stable a couple of months.

What?

Renaming Comments Query Loop with Comments

Why?

Right now, Comments Query Loop is not working like a Query block, it has not any option and is just rendering the comments, being able to add styling to them.

How?

Search and replace!

Testing Instructions

  • On trunk, edit the "Single" template in the Site Editor to add the "Comments" block.
  • Change some of the block's properties, e.g. text color or font size.
  • Switch to the Code Editor and verify that the block's ID is wp:comments-query-loop. Copy-paste the block attributes, and the outermost <div /> tag (including its HTML attributes) to a text editor of your choice; we'll need them later.
  • Switch back to the Visual Editor.
  • Switch to this branch (update/rename-comments-query-loop).
  • Reload the template in the Site Editor.
  • Open your browser console, and verify that it contains an "Updated blocks: core/comments` message.
  • Switch to the Code Editor. Verify that the block ID is now wp:comments there ✅ Compare the block attributes and the outermost <div /> tag to the ones you copied earlier. They should be identical, except now there should be an additional wp-block-comments-query-loop class (for backwards compatibility).
  • Switch back to the Visual Editor.
  • Verify that the block still works as before.
  • Remove the block, and insert a new "Comments" block. Verify in the browser console that it doesn't trigger a block deprecation.
  • Switch to the Code Editor, and verify that it doesn't have the wp-block-comments-query-loop class.

Finally, try the same in the Post Editor.

Screenshots or screencast

@github-actions
Copy link

github-actions bot commented Apr 21, 2022

Size Change: +58 B (0%)

Total Size: 1.25 MB

Filename Size Change
build/block-editor/index.min.js 152 kB +1 B (0%)
build/block-editor/style-rtl.css 14.5 kB -7 B (0%)
build/block-editor/style.css 14.5 kB -6 B (0%)
build/block-library/index.min.js 183 kB +127 B (0%)
build/blocks/index.min.js 47.1 kB +49 B (0%)
build/components/index.min.js 230 kB +76 B (0%)
build/components/style-rtl.css 14 kB +38 B (0%)
build/components/style.css 14 kB +39 B (0%)
build/edit-navigation/style-rtl.css 4.02 kB -9 B (0%)
build/edit-navigation/style.css 4.03 kB -9 B (0%)
build/edit-post/style-rtl.css 6.97 kB -58 B (-1%)
build/edit-post/style.css 6.97 kB -58 B (-1%)
build/edit-site/style-rtl.css 8.23 kB -51 B (-1%)
build/edit-site/style.css 8.21 kB -50 B (-1%)
build/edit-widgets/style-rtl.css 4.35 kB -11 B (0%)
build/edit-widgets/style.css 4.35 kB -11 B (0%)
build/redux-routine/index.min.js 2.68 kB -2 B (0%)
ℹ️ 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 6.58 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-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 103 B
build/block-library/blocks/audio/style.css 103 B
build/block-library/blocks/audio/theme-rtl.css 110 B
build/block-library/blocks/audio/theme.css 110 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 59 B
build/block-library/blocks/avatar/style.css 59 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 441 B
build/block-library/blocks/button/editor.css 441 B
build/block-library/blocks/button/style-rtl.css 543 B
build/block-library/blocks/button/style.css 543 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 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 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 95 B
build/block-library/blocks/comments/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 615 B
build/block-library/blocks/cover/editor.css 616 B
build/block-library/blocks/cover/style-rtl.css 1.55 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 110 B
build/block-library/blocks/embed/theme.css 110 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.5 kB
build/block-library/blocks/gallery/style.css 1.49 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 333 B
build/block-library/blocks/group/editor.css 333 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 738 B
build/block-library/blocks/image/editor.css 737 B
build/block-library/blocks/image/style-rtl.css 524 B
build/block-library/blocks/image/style.css 530 B
build/block-library/blocks/image/theme-rtl.css 110 B
build/block-library/blocks/image/theme.css 110 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 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 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 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 402 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.96 kB
build/block-library/blocks/navigation/style.css 1.95 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 423 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 157 B
build/block-library/blocks/paragraph/editor.css 157 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 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 632 B
build/block-library/blocks/post-comments/style.css 630 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 605 B
build/block-library/blocks/post-featured-image/editor.css 605 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/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 80 B
build/block-library/blocks/post-title/style.css 80 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 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 385 B
build/block-library/blocks/search/style.css 386 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 233 B
build/block-library/blocks/separator/style.css 233 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 708 B
build/block-library/blocks/site-logo/editor.css 708 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 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 175 B
build/block-library/blocks/table/theme.css 175 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 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 159 B
build/block-library/blocks/video/style.css 159 B
build/block-library/blocks/video/theme-rtl.css 110 B
build/block-library/blocks/video/theme.css 110 B
build/block-library/common-rtl.css 987 B
build/block-library/common.css 984 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.2 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.5 kB
build/block-library/style.css 11.5 kB
build/block-library/theme-rtl.css 695 B
build/block-library/theme.css 700 B
build/block-serialization-default-parser/index.min.js 1.11 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/compose/index.min.js 11.7 kB
build/core-data/index.min.js 14.7 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 653 B
build/data/index.min.js 7.95 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-navigation/index.min.js 16 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 30.4 kB
build/edit-site/index.min.js 52 kB
build/edit-widgets/index.min.js 16.5 kB
build/editor/index.min.js 39.4 kB
build/editor/style-rtl.css 3.65 kB
build/editor/style.css 3.65 kB
build/element/index.min.js 4.27 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 6.75 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.38 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 612 B
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/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 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.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@ockham
Copy link
Contributor

ockham commented Apr 21, 2022

Right now, Comments Query Loop is not working like a Query block, it has not any option and is just rendering the comments, being able to add styling to them.

I'd add that it also has inner blocks that go beyond a query, such as the Comments Title, and the Comments Form (which we're going to include per #40256) 😄

@@ -2,7 +2,7 @@
"$schema": "https://schemas.wp.org/trunk/block.json",
"apiVersion": 2,
"name": "core/comments-query-loop",
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's actually also change the ID:

Suggested change
"name": "core/comments-query-loop",
"name": "core/comments",

Reasoning: It's overall much less confusing to have the ID reflect the block name (and file and folder names), especially if there are plenty of related blocks with similar names.

As for the reasoning why I think we should rename the block overall, see #40506 (comment).
Let's add some logic to convert from the old to the new ID here:

// Convert Post Comment blocks in existing content to Comment blocks.
// TODO: Remove these checks when WordPress 6.0 is released.
if ( name === 'core/post-comment-author' ) {
name = 'core/comment-author-name';
}
if ( name === 'core/post-comment-content' ) {
name = 'core/comment-content';
}
if ( name === 'core/post-comment-date' ) {
name = 'core/comment-date';
}

Copy link
Contributor

Choose a reason for hiding this comment

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

Adding that it seems like the stabilized Comments Query Loop block has so far only been in on GB plugin release (v13.0.0): 6f7c5b5

Bildschirmfoto 2022-04-21 um 15 07 12

@ockham
Copy link
Contributor

ockham commented Apr 21, 2022

Given latest developments (#40521), I'm afraid we can close this now 😅

@ockham ockham reopened this Apr 26, 2022
@ockham
Copy link
Contributor

ockham commented Apr 26, 2022

Given latest developments (#40521), I'm afraid we can close this now 😅

Since we've decided to punt #40521, we're revisiting this PR 😬

@ockham
Copy link
Contributor

ockham commented Apr 26, 2022

Inserting a Comments Query Loop on trunk, and then switching to this branch is currently causing a block validation error:

image

Console:

image

I think we have to update a few parent and ancestor fields in some child blocks' block.json files (but even that doesn't seem to be quite enough to get rid of the validation error).

@ockham
Copy link
Contributor

ockham commented Apr 27, 2022

If we get totally stuck on the block validation error, our fallback could probably be to leave the block ID unchanged (i.e. keep it as core/comments-query-loop). I'd rather avoid that TBH, so it'd be good if we could try to fix the error for a bit longer, but if all else fails, we have at least a fallback strategy I guess 😅

Comment on lines 42 to 49
save( { attributes: { tagName: Tag } } ) {
return (
<Tag className="wp-block-comments-query-loop">
<InnerBlocks.Content />
</Tag>
);
},
Copy link
Member

@luisherranz luisherranz Apr 27, 2022

Choose a reason for hiding this comment

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

I added a deprecation with the old class name to bypass the validation error. I've read a few times the deprecation guide, but I still don't know if this is a use case that is supposed to be handled like this. In a sense, I added a save with the old class name to say "hey Gutenberg, this change is expected and the attributes didn't change, so just update the HTML and don't bother the user with a warning message".

Copy link
Contributor

Choose a reason for hiding this comment

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

We might not need the deprecation (but can add the relevant logic to the Comments block's save.js instead?)

Copy link
Member

Choose a reason for hiding this comment

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

add the relevant logic to the Comments block's save.js

What logic? (sorry I'm not following 😄)

@@ -20,6 +20,7 @@ import { hasBlockSupport, getBlockDefaultClassName } from '@wordpress/blocks';
* @return {Object} Filtered props applied to save element.
*/
export function addGeneratedClassName( extraProps, blockType ) {
if ( blockType.name === 'core/comments' ) return extraProps;
Copy link
Member

@luisherranz luisherranz Apr 27, 2022

Choose a reason for hiding this comment

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

But the old save function added to the deprecated doesn't work yet by itself because this function (called in the blocks.getSaveContent.extraProps filter) is adding the wp-block-comments class name so we need to find a solution for that. This is just a quick fix to show that it validates properly if this is bypassed.

Copy link
Contributor

Choose a reason for hiding this comment

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

called in the blocks.getSaveContent.extraProps filter

Can we add our own filter to that hook in order to remove the old class name? 🤔

Copy link
Contributor

Choose a reason for hiding this comment

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

Oooh, or maybe we can solve our issue using this filter?

Copy link
Contributor

Choose a reason for hiding this comment

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

called in the blocks.getSaveContent.extraProps filter

Can we add our own filter to that hook in order to remove the old class name? 🤔

function setCommentsBlockCustomClassName( props ) {
	let { className } = props;
	const classes = className?.split( ' ' );
	if ( classes.includes( 'wp-block-comments' ) ) {
		className = classes
			.filter( ( c ) => c !== 'wp-block-comments-query-loop' )
			.join( ' ' );
	}
	return { ...props, className };
}

addFilter(
	'blocks.getSaveContent.extraProps',
	'core/comments/set-block-custom-class-name',
	setCommentsBlockCustomClassName
);

image

Well, not quite there yet 😅

@ockham
Copy link
Contributor

ockham commented Apr 27, 2022

Thanks @luisherranz! A deprecation/migration could be one promising strategy.

I'm still wondering, why are we getting the block invalidation error, when the legacy block conversion seems to be working for other blocks? I.e. what are they doing differently? (This is what lead me to assume that the problem here is that we have child blocks -- but maybe I'm mistaken?)

@michalczaplinski
Copy link
Contributor

michalczaplinski commented Apr 27, 2022

I've figured out the problem and the reason was that in our case Gutenberg expects the apiVersion to be defined in the deprecations (!).

2022-04-27_18-33-23.mp4

I think that this is not documented anywhere and is also very counter-intuitive.

@luisherranz
Copy link
Member

luisherranz commented Apr 28, 2022

Well, the API version of the deprecated block is 2, so this makes sense. It's true that in this case, we would be using it to bypass those filters, but it still seems correct because it's explicit in the conditional that those filters shouldn't run for block types with API versions bigger than 1.

I agree it'd be great to get confirmation from someone with more expertise, though 🙂

I guess another question is, if we bypass all those filters, what happens with the other functionality? For example, are now old blocks with custom class names triggering a validation error? Although it's possible that Gutenberg is dealing with that logic somewhere else because if not the same would happen to all the API > 1 blocks.

@ockham
Copy link
Contributor

ockham commented Apr 28, 2022

To recap:

The goal of this PR is to change the name (and ID) of the "Comments Query Loop" (core/comments-query-loop) block to (just) "Comments (core/comments).

We've added logic to convert-legacy-blocks.js in order to change the ID. However, we're still getting a block validation error:

image

The reason seems to be that we useBlockProps.save() on the wrapping HTML element in our save.js:

export default function CommentsSave( { attributes: { tagName: Tag } } ) {
return (
<Tag { ...useBlockProps.save() }>
<InnerBlocks.Content />
</Tag>
);
}

We currently work around this by adding a deprecation (which also wasn't straight-forward; we had to set apiVersion to 2 for it to make sure the blocks.getSaveContent.extraProps filter is applied).

To me, it seem wrong that on top of the legacy block conversion logic, we also need a deprecation; I also think that it'll be easy to miss for devs that will work with this code in the future.

I feel like that using useBlockProps.save() on a block's wrapping element should be wide-spread enough to be properly handled by convert-legacy-blocks.js. Or maybe there's already a filter or something that we could use that I'm currently missing?

I'd be curious to hear your thoughts @gziolo @youknowriad

@youknowriad
Copy link
Contributor

Hey @ockham to be honest, I'm not sure why you have to add a deprecation while with all the other previous case of legacyConvert, we didn't AFAIK. That said, this "legacyConvert" has always been a hack and not an official API, in that sense, it's possible that it doesn't work properly in all cases.

I'm curious to try to understand why this block is different than the previous legacy conversion we did.

@ockham
Copy link
Contributor

ockham commented Apr 29, 2022

Hey @ockham to be honest, I'm not sure why you have to add a deprecation while with all the other previous case of legacyConvert, we didn't AFAIK.

Heh, that's exactly what puzzled me as well 😅 I can't say I've got a totally conclusive answer, but IIUC, the main difference is the useBlockProps.save() on the wrapping HTML element. From a quick look, the other blocks that are handled by convert-legacy-blocks.js don't do that.

What I think happens is that when the block is parsed for validation, the previous block class name (wp-block-comments-query-loop) on the div is interpreted as a custom CSS class name by fixCustomClassname and kept, while the new one (wp-block-comments) is added.

That said, this "legacyConvert" has always been a hack and not an official API, in that sense, it's possible that it doesn't work properly in all cases.

Yeah, it did look like a possbile shortcoming to me...

@ockham ockham force-pushed the update/rename-comments-query-loop branch from a8b9da2 to ebcbe8d Compare July 6, 2022 10:36
@ockham
Copy link
Contributor

ockham commented Jul 6, 2022

Rebased to include #42081.

@ockham
Copy link
Contributor

ockham commented Jul 6, 2022

This should be ready for another look. (I've updated the Testing Instructions in the PR description to cover all the weird little edge cases I ran into when testing this.)

Copy link
Contributor

@DAreRodz DAreRodz left a comment

Choose a reason for hiding this comment

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

I haven't followed the test instructions yet, but the code looks really neat.

Great job, @ockham (and others)! 👏👏

@DAreRodz
Copy link
Contributor

DAreRodz commented Jul 7, 2022

I've tested it, and it works as expected. 👍

@DAreRodz
Copy link
Contributor

DAreRodz commented Jul 7, 2022

As the PR is already approved, I'll merge it so I can rebase #41807 on top of these changes.

@DAreRodz DAreRodz merged commit bbd198d into trunk Jul 7, 2022
@DAreRodz DAreRodz deleted the update/rename-comments-query-loop branch July 7, 2022 10:28
@github-actions github-actions bot added this to the Gutenberg 13.7 milestone Jul 7, 2022
@bph bph added the [Block] Comments Affects the Comments Block - formerly known as Comments Query Loop label Jul 12, 2022
@mburridge mburridge added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Sep 15, 2022
@mburridge
Copy link
Contributor

Added the Needs Dev Note label in case this needs a dev note (either individual or as part of a "misc" dev note) for WP 6.1 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Comments Affects the Comments Block - formerly known as Comments Query Loop Needs Dev Note Requires a developer note for a major WordPress release cycle
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants