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

Send registered patterns in HTML and combine them with REST ones #40818

Merged
merged 6 commits into from
May 17, 2022

Conversation

jsnajdr
Copy link
Member

@jsnajdr jsnajdr commented May 4, 2022

Fixes #40736. Allows to register patterns on current_screen or admin_init again, and these are sent serialized, as a settings argument of initializeEditor, in the editor page HTML. Patterns from REST (preferred source from now) are added on top of these, instead of replacing them completely.

@jsnajdr jsnajdr self-assigned this May 4, 2022
Comment on lines 123 to 124
'__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered(),
'__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(),
Copy link
Member

Choose a reason for hiding this comment

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

Can't you get data via the REST API? Why load this in via settings?

Copy link
Member Author

Choose a reason for hiding this comment

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

The REST API doesn't know all registered patterns. If they are registered in the current_screen or the admin_init hook, these hooks are not run while serving a REST endpoint. See the PR description and the #40736 that this PR attempts to fix.

Copy link
Member

Choose a reason for hiding this comment

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

If you register your pattern in correctly or weirdly, that is on you as a developer. I would strongly recommend asyncly loading pattern via the REST API. This could be a lot of data on the page load, even if it is not used.

Copy link
Contributor

@johnstonphilip johnstonphilip May 4, 2022

Choose a reason for hiding this comment

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

@spacedmonkey See related conversation about this here: #40736

It was suggested to throw a _doing_it_wrong if not using init, but ultimately decided to maintain backwards compatibility.

@github-actions
Copy link

github-actions bot commented May 4, 2022

Size Change: +221 B (0%)

Total Size: 1.24 MB

Filename Size Change
build/block-library/index.min.js 180 kB +18 B (0%)
build/components/style-rtl.css 15 kB -1 B (0%)
build/components/style.css 15.1 kB -1 B (0%)
build/edit-post/style-rtl.css 7.08 kB -1 B (0%)
build/edit-post/style.css 7.09 kB -2 B (0%)
build/edit-site/index.min.js 47.8 kB +144 B (0%)
build/editor/index.min.js 38.5 kB +64 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.51 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 150 kB
build/block-editor/style-rtl.css 14.9 kB
build/block-editor/style.css 14.9 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/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 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 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 127 B
build/block-library/blocks/comment-template/style.css 127 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 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.53 kB
build/block-library/blocks/cover/style.css 1.53 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 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 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 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 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 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 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.95 kB
build/block-library/blocks/navigation/style.css 1.94 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 395 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 69 B
build/block-library/blocks/post-comments-form/editor.css 69 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 628 B
build/block-library/blocks/post-comments/style.css 628 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 721 B
build/block-library/blocks/post-featured-image/editor.css 721 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 323 B
build/block-library/blocks/post-template/style.css 323 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 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 332 B
build/block-library/blocks/spacer/editor.css 332 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 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 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 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.3 kB
build/block-library/editor.css 10.3 kB
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.6 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47 kB
build/components/index.min.js 227 kB
build/compose/index.min.js 11.7 kB
build/core-data/index.min.js 14.6 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.98 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.69 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 4.05 kB
build/edit-navigation/style.css 4.06 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/style-rtl.css 7.97 kB
build/edit-site/style.css 7.95 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.41 kB
build/edit-widgets/style.css 4.41 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.3 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.1 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 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 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@adamziel adamziel added 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 May 16, 2022
Copy link
Contributor

@adamziel adamziel left a comment

Choose a reason for hiding this comment

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

✅ It works
✅ It solves a regression as discussed in #40736
✅ The code makes sense as it merges the patterns from settings with those from the REST API

Let's 🚢 !

@jsnajdr, is there any particular order in which this and WordPress/wordpress-develop#2672 must be merged? I assume we need to backport this to RC3, too.

@jsnajdr
Copy link
Member Author

jsnajdr commented May 16, 2022

is there any particular order in which this and WordPress/wordpress-develop#2672 must be merged

The Gutenberg patch works even without the Core patch, but vice versa, when Core is patched and Gutenberg unpatched, block pattern loading will break. So, the correct order is Gutenberg then Core.

There will be problem when you have patched Core and older Gutenberg plugin, like the version 13.2 released last week. Then you're in the broken state 🙁

@adamziel
Copy link
Contributor

adamziel commented May 16, 2022

@jsnajdr would it be possible to only pass the __experimentalBlockPatternCategories and __experimentalBlockPatterns settings in core when the active Gutenberg version is patched? I'm thinking of some kind of a feature flag.

@jsnajdr
Copy link
Member Author

jsnajdr commented May 16, 2022

The code in Core that generates the editor HTML could apply a new filter:

if ( apply_filters( 'should_add_block_patterns_to_editor_settings', false ) ) {
  // Add patterns to settings.
}

and then Gutenberg plugin (and also Gutenberg shipped in Core) enables the loading:

add_filter( 'should_add_block_patterns_to_editor_settings', '__return_true' );

The result is:

  1. A really old Gutenberg plugin, before support for block patterns REST was added, on latest Core, won't load block patterns at all because they are neither in settings (didn't enable the filter) nor in REST (not supported)
  2. A recent Gutenberg plugin on latest Core will load block patterns, but only the REST ones, not these registered in current_screen. Because it doesn't enable adding block patterns to editor settings on server.
  3. The latest Gutenberg plugin (with this patch) will load patterns from both settings and REST, because it enables the filter.

Sounds good?

@adamziel
Copy link
Contributor

adamziel commented May 16, 2022

@jsnajdr as far as I understand:

  • There would be no broken state
  • The handling ideas you listed make sense

Overall, it does sound really good 🎉

@jsnajdr jsnajdr force-pushed the update/patterns-from-settings branch from bfd508a to a416b84 Compare May 16, 2022 13:49
@jsnajdr
Copy link
Member Author

jsnajdr commented May 16, 2022

Overall, it does sound really good

Pushed a commit to this PR that implements the filter. When backporting to Core, the add_filter( 'should_add_block_patterns_to_editor_settings' ) must be in a place where:

  • it's executed when the Core version of Gutenberg is used.
  • it's not executed when a custom Gutenberg plugin is used. Let the plugin itself add a filter if it wants it.

@jsnajdr jsnajdr force-pushed the update/patterns-from-settings branch from a416b84 to 0fd71b2 Compare May 16, 2022 13:57
@jsnajdr jsnajdr force-pushed the update/patterns-from-settings branch from 0fd71b2 to d64536d Compare May 16, 2022 14:10
@adamziel
Copy link
Contributor

adamziel commented May 16, 2022

@jsnajdr would you please spin a backport PR for this? Just to recap my understanding, I believe we expect to see the patterns being loaded using the following data sources:

WP\Plugin Bundled GB Old plugin version Recent<13.3 13.3+
5.9 11.9: Settings Same as now Same as now Settings + REST API
6.0 13.1: Settings + REST API What's the earliest supported version? 13.1? Then REST API REST API Settings + REST API
6.1 13.3+: Settings + REST API Unsupported Unsupported Settings + REST API

When backporting to Core, the add_filter( 'should_add_block_patterns_to_editor_settings' ) must be in a place where it's not executed when a custom Gutenberg plugin is used. Let the plugin itself add a filter if it wants it.

I wonder what would be the best way to achieve that.

One thing that comes to mind is if( is_plugin_active( 'gutenberg/gutenberg.php' ) ).

✅ It would get the job done
❌ It feels off and I can't find any examples of core checking that for the Gutenberg plugin

Alternatively, it could be placed in some filter that Gutenberg unhooks or a class that Gutenberg overrides. It would have to be something that already existed in the plugin for a while and was designed for a scenario such as ours. I don't see any obvious candidates for that so maybe is_plugin_active isn't that bad after all?

Copy link
Contributor

@peterwilsoncc peterwilsoncc left a comment

Choose a reason for hiding this comment

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

Alternatively, it could be placed in some filter that Gutenberg unhooks or a class that Gutenberg overrides. It would have to be something that already existed in the plugin for a while and was designed for a scenario such as ours. I don't see any obvious candidates for that so maybe is_plugin_active isn't that bad after all?

is_plugin_active() doesn't return the correct result for sites using the plugin as an mu-plugin.

In the past a check has been used during the WP upgrade procedure

  • WP 5.0: Disabled the plugin upon the block editor becoming part of core
  • WP 5.9: Disabled plugin versions prior to 11.9 as it was incompatible and caused a fatal error.

I think similar has been in some releases in between but I don't recall which.

I'd prefer a filter rather than adding plugin checks to other source code, it's really snowflakey and sets a bad precedent.

Would reversing the filter's default value help for gutenberg?

*
* @param bool $should_add_to_settings
*/
if ( apply_filters( 'should_add_block_patterns_to_editor_settings', false ) ) {
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
if ( apply_filters( 'should_add_block_patterns_to_editor_settings', false ) ) {
if ( apply_filters( 'gutenberg_add_block_patterns_to_editor_settings', false ) ) {

🔢 Would need to be renamed throughout

@jsnajdr
Copy link
Member Author

jsnajdr commented May 17, 2022

Would reversing the filter's default value help for gutenberg?

It's not possible because the true value says "I want patterns in settings" and Gutenberg 13.1-13.2 both 1) doesn't want patterns in settings and 2) doesn't hook the filter to change the value.

The default value needs to be "don't send me patterns in settings"

@jsnajdr
Copy link
Member Author

jsnajdr commented May 17, 2022

A solution even better than the new filter would be to rename the settings fields to:

  • __experimentalAdditionalBlockPatterns
  • __experimentalAdditionalBlockPatternCategories

This avoids the unfortunate condition that shipped in Gutenberg 13.1 that patterns are loaded from REST only when they are not in settings, like:

const blockPatterns = settings.__experimentalBlockPatterns ?? select( coreStore ).getBlockPatterns();

which disables loading from REST when the setting is present.

Then WordPress 6.0 would behave like:

  • ancient pre-13.0 Gutenberg: no patterns are loaded at all because they are not in editor settings and REST is not supported yet. Upgrade from WordPress 5.9 to WordPress 6.0 will break installations with such an old plugin.
  • Gutenberg 13.0: patterns are loaded from REST but the current_screen-registered ones are not.
  • latest Gutenberg: patterns are loaded both from REST and settings and merged together.

@jsnajdr
Copy link
Member Author

jsnajdr commented May 17, 2022

A solution even better than the new filter would be to rename the settings fields

Implemented this as an additional commit to both the Core and Gutenberg PRs and verified that it really works 👍

@jsnajdr
Copy link
Member Author

jsnajdr commented May 17, 2022

would you please spin a backport PR for this?

@adamziel Not sure how to do this because i) no PHP from this PR needs to be backported, all the PHP changes that are needed are in WordPress/wordpress-develop#2672 ii) we need to backport the JS changes in packages/{editor,edit-site} but how is that done? The wordpress-develop repo doesn't contain the JS scripts at all.

@adamziel
Copy link
Contributor

adamziel commented May 17, 2022

@jsnajdr to recap:

  • WordPress 5.9 will keep working as expected with all supported Gutenberg versions
  • WordPress 6.0 will work as expected with Gutenberg 13.0+
  • WordPress 6.0 will not show any patterns with Gutenberg 12.9-

Since the Gutenberg version bundled in the WordPress 6.0 is 13.0, I think that's a good trade-off. We could even go one step further and disable plugin versions <= 12.9 on upgrade as @peterwilsoncc have mentioned above.

In any case, let's land this 🎉

@jsnajdr
Copy link
Member Author

jsnajdr commented May 17, 2022

WordPress 5.9 will keep working as expected with all supported Gutenberg version

Just one caveat in this setup: WordPress 5.9 with latest Gutenberg will stop showing patterns registered in current_screen. Because the server will send all patterns in __experimentalBlockPatterns setting, but latest Gutenberg ignores that setting and looks for __experimentalAdditionalBlockPatterns which is empty. It will only load patterns from REST which don't include the current_screen ones.

Can be fixed by looking at both fields:

patterns = union( settings.__experimentalBlockPatterns, settings.__experimentalAdditionalBlockPatterns, restPatterns );

Going to push a fix.

@adamziel adamziel merged commit 72a348b into trunk May 17, 2022
@adamziel adamziel deleted the update/patterns-from-settings branch May 17, 2022 12:22
@github-actions github-actions bot added this to the Gutenberg 13.3 milestone May 17, 2022
adamziel pushed a commit that referenced this pull request May 17, 2022
)

* Send registered patterns in HTML and combine them with REST ones

* Fix formatting

* Use the outside_init_only param when getting patterns in edit-site page

* Add patterns to settings only if enabled by filter

* Remove filter and rename settings fields instead

* Support all settings forms in both WP 5.9 and 6.0
@adamziel
Copy link
Contributor

I just cherry-picked this to wp/6.0 branch to be included in the next release: 6c96f52

@adamziel adamziel 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 May 17, 2022
@adamziel
Copy link
Contributor

Thank you so much for all your great work here @jsnajdr! 🎉

pento pushed a commit to WordPress/wordpress-develop that referenced this pull request May 17, 2022
Reverts changes from [53155] to ensure backward compatibility.

Companion to Gutenberg changes WordPress/gutenberg#40818. That makes sure that patterns registered with `admin_init` or `current_screen` hooks are not lost.

Props jsnajdr, zieladam, peterwilsoncc, johnstonphilip.
See #55567.



git-svn-id: https://develop.svn.wordpress.org/trunk@53404 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request May 17, 2022
Reverts changes from [53155] to ensure backward compatibility.

Companion to Gutenberg changes WordPress/gutenberg#40818. That makes sure that patterns registered with `admin_init` or `current_screen` hooks are not lost.

Props jsnajdr, zieladam, peterwilsoncc, johnstonphilip.
See #55567.


Built from https://develop.svn.wordpress.org/trunk@53404


git-svn-id: http://core.svn.wordpress.org/trunk@52993 1a063a9b-81f0-0310-95a4-ce76da25c4cd
gMagicScott pushed a commit to gMagicScott/core.wordpress-mirror that referenced this pull request May 17, 2022
Reverts changes from [53155] to ensure backward compatibility.

Companion to Gutenberg changes WordPress/gutenberg#40818. That makes sure that patterns registered with `admin_init` or `current_screen` hooks are not lost.

Props jsnajdr, zieladam, peterwilsoncc, johnstonphilip.
See #55567.


Built from https://develop.svn.wordpress.org/trunk@53404


git-svn-id: https://core.svn.wordpress.org/trunk@52993 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@mburridge mburridge added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Sep 9, 2022
@mburridge
Copy link
Contributor

Not sure if this needs a dev note for the 6.1 release, but adding the label just in case.

whereiscodedude pushed a commit to whereiscodedude/wpss that referenced this pull request Sep 18, 2022
Reverts changes from [53155] to ensure backward compatibility.

Companion to Gutenberg changes WordPress/gutenberg#40818. That makes sure that patterns registered with `admin_init` or `current_screen` hooks are not lost.

Props jsnajdr, zieladam, peterwilsoncc, johnstonphilip.
See #55567.


Built from https://develop.svn.wordpress.org/trunk@53404
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Dev Note Requires a developer note for a major WordPress release cycle
Projects
No open projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Regression: Cannot register_block_pattern using current_screen hook.
6 participants