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

Add: Ability to use creation patterns for other post types besides page #41791

Conversation

jorgefilipecosta
Copy link
Member

@jorgefilipecosta jorgefilipecosta commented Jun 17, 2022

Closes: #41304

This PR is a follow-up to #40034 and allows the creation patterns modal to appear in other post types besides pages.

API

In order for a pattern to appear in a post type starting modal, the pattern blockTypes need to include support for 'core/post-content' ( so it defines the pattern is supposed to be the full content of a post) and the pattern should define the postTypes it supports as starting content in the postTypes array. Defining support only 'core/post-content' continues to work as before as by default we assume that a pattern supports being the full content of a page.

register_block_pattern( 'custom-pattern', array(
			'title'      => _x( 'Start post pattern', 'Block pattern title', 'gutenberg' ),
			'blockTypes' => array( 'core/paragraph', 'core/post-content' ),
			'postTypes' = array( 'product' ),
			'content'    => '<!-- wp:paragraph -->
<p>A start post pattern</p>
<!-- /wp:paragraph -->',
		) );

API shape alternatives

Old discussion:
I'm not totally sure if using blockTypes with 'core/post-content/$postType' is the right path. For template-parts we use a similar format e.g: 'core/template-part/header'. This format is consistent with the template-pasts format and that is the main reason I'm using it.
If people prefer I'm open to an alternative format e.g: using a new property on the pattern like "creationPostTypes" an array of post types that the pattern defines support for appearing as start content (e.g: ["page, "product",...]).

cc: @mtias, @mcsf in case you have a preference for a specific API shape.

Updated: following @mtias suggestion we use a post types array.

Post types defining patterns they support vs Patterns defining the post types they support

In #41304, @Humanify-nl proposed a different API, where the post type is the one that defines patterns that appear. I'm following a different path where the patterns define the post types where they appear. This allows patterns in the pattern directory to define support for the common post types where they work, without the post type not even knowing that the pattern exists. It seems post types are less numerous than patterns so it is more expected that the pattern creator knows the post types where the pattern makes sense than the post type creator is aware of all the possible patterns that can be used.

Common use cases and code samples of how to achieve them.

On my "Special Page" post type I want to support all the patterns that appear on normal pages

	$patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered();
	foreach ( $patterns as $pattern ) {
		if (
			! empty($pattern['blockTypes'] ) && in_array('core/post-content', $pattern['blockTypes'] ) &&
			( empty($pattern['postTypes'] || ( in_array('page', $pattern['postTypes'] ) && ! in_array('page', $pattern['special-page'] ) )
		) {
			unregister_block_pattern( $pattern['name'] );
			$pattern['postTypes'] = array_merge( empty($pattern['postTypes']) ? array() : $pattern['startContentPostTypes'], array( 'special-page') );
			register_block_pattern( $pattern['name'], $pattern );
		}
	}

I want to totally remove this functionality from my "Special Post" post type.

	$patterns = WP_Block_Patterns_Registry::get_instance()->get_all_registered();
	foreach ( $patterns as $pattern ) {
		if (
			! empty( $pattern['startContentPostTypes'] ) &&
			in_array( 'special-post', $pattern['postTypes'] )
		) {
			unregister_block_pattern( $pattern['name'] );
			$pattern['postTypes'] = array_diff( $pattern['postTypes'], array( 'special-post') );
			register_block_pattern( $pattern['name'], $pattern );
		}
	}

Testing Instructions

I applied the following diff:

diff --git a/lib/compat/wordpress-6.0/block-patterns-update.php b/lib/compat/wordpress-6.0/block-patterns-update.php
index c17a65be2a..fca9c8326b 100644
--- a/lib/compat/wordpress-6.0/block-patterns-update.php
+++ b/lib/compat/wordpress-6.0/block-patterns-update.php
@@ -23,7 +23,8 @@ function gutenberg_register_gutenberg_patterns() {
 	$patterns = array(
 		'query-standard-posts'                 => array(
 			'title'      => _x( 'Standard', 'Block pattern title', 'gutenberg' ),
-			'blockTypes' => array( 'core/query' ),
+			'blockTypes' => array( 'core/query', 'core/post-content' ),
+			'postTypes' => array( 'page', 'post' ),
 			'categories' => array( 'query' ),
 			'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
 							<div class="wp-block-query">
@@ -41,7 +42,7 @@ function gutenberg_register_gutenberg_patterns() {
 		),
 		'query-medium-posts'                   => array(
 			'title'      => _x( 'Image at left', 'Block pattern title', 'gutenberg' ),
-			'blockTypes' => array( 'core/query' ),
+			'blockTypes' => array( 'core/query', 'core/post-content' ),
 			'categories' => array( 'query' ),
 			'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
 							<div class="wp-block-query">
@@ -61,7 +62,8 @@ function gutenberg_register_gutenberg_patterns() {
 		),
 		'query-small-posts'                    => array(
 			'title'      => _x( 'Small image and title', 'Block pattern title', 'gutenberg' ),
-			'blockTypes' => array( 'core/query' ),
+			'blockTypes' => array( 'core/query', 'core/post-content' ),
+			'postTypes' => array( 'page', 'post' ),
 			'categories' => array( 'query' ),
 			'content'    => '<!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->
 							<div class="wp-block-query">
@@ -80,7 +82,8 @@ function gutenberg_register_gutenberg_patterns() {
 		),
 		'query-grid-posts'                     => array(
 			'title'      => _x( 'Grid', 'Block pattern title', 'gutenberg' ),
-			'blockTypes' => array( 'core/query' ),
+			'blockTypes' => array( 'core/query','core/post-content' ),
+			'postTypes' => array( 'page' ),
 			'categories' => array( 'query' ),
 			'content'    => '<!-- wp:query {"query":{"perPage":6,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"exclude","inherit":false},"displayLayout":{"type":"flex","columns":3}} -->
 							<div class="wp-block-query">
@@ -96,7 +99,8 @@ function gutenberg_register_gutenberg_patterns() {
 		),
 		'query-large-title-posts'              => array(
 			'title'      => _x( 'Large title', 'Block pattern title', 'gutenberg' ),
-			'blockTypes' => array( 'core/query' ),
+			'blockTypes' => array( 'core/query', 'core/post-content' ),
+			'postTypes' => array( 'post' ),
 			'categories' => array( 'query' ),
 			'content'    => '<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"100px","right":"100px","bottom":"100px","left":"100px"}},"color":{"text":"#ffffff","background":"#000000"}}} -->
 							<div class="wp-block-group alignfull has-text-color has-background" style="background-color:#000000;color:#ffffff;padding-top:100px;padding-right:100px;padding-bottom:100px;padding-left:100px"><!-- wp:query {"query":{"perPage":3,"pages":0,"offset":0,"postType":"post","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false}} -->

I created a new post and verified the following modal appears:
image

I created a new page and verified the following modal appears:
image

@jorgefilipecosta jorgefilipecosta added the [Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced label Jun 17, 2022
@github-actions
Copy link

github-actions bot commented Jun 17, 2022

Size Change: +3.46 kB (0%)

Total Size: 1.25 MB

Filename Size Change
build/annotations/index.min.js 2.76 kB +24 B (+1%)
build/block-editor/index.min.js 152 kB +580 B (0%)
build/block-editor/style.css 14.5 kB -1 B (0%)
build/block-library/blocks/file/style-rtl.css 224 B -28 B (-11%) 👏
build/block-library/blocks/file/style.css 225 B -28 B (-11%) 👏
build/block-library/blocks/navigation/style-rtl.css 1.96 kB +25 B (+1%)
build/block-library/blocks/navigation/style.css 1.95 kB +25 B (+1%)
build/block-library/blocks/post-template/style-rtl.css 282 B -41 B (-13%) 👏
build/block-library/blocks/post-template/style.css 282 B -41 B (-13%) 👏
build/block-library/blocks/search/style-rtl.css 379 B -23 B (-6%)
build/block-library/blocks/search/style.css 380 B -23 B (-6%)
build/block-library/index.min.js 183 kB +283 B (0%)
build/block-library/style-rtl.css 11.4 kB -43 B (0%)
build/block-library/style.css 11.4 kB -44 B (0%)
build/blocks/index.min.js 47 kB +57 B (0%)
build/components/index.min.js 229 kB +1.9 kB (+1%)
build/core-data/index.min.js 14.7 kB -40 B (0%)
build/customize-widgets/index.min.js 11.2 kB +22 B (0%)
build/edit-post/index.min.js 30.4 kB +75 B (0%)
build/edit-site/index.min.js 50.7 kB +690 B (+1%)
build/edit-site/style-rtl.css 8.14 kB +28 B (0%)
build/edit-site/style.css 8.12 kB +31 B (0%)
build/edit-widgets/index.min.js 16.4 kB +34 B (0%)
build/format-library/index.min.js 6.62 kB +22 B (0%)
build/token-list/index.min.js 644 B -18 B (-3%)
build/wordcount/index.min.js 1.06 kB -6 B (-1%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
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-editor/style-rtl.css 14.5 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 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 514 B
build/block-library/blocks/button/style.css 514 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 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/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/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 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 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-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/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 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/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 677 B
build/block-library/theme.css 682 B
build/block-serialization-default-parser/index.min.js 1.11 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/components/style-rtl.css 14 kB
build/components/style.css 14 kB
build/compose/index.min.js 11.7 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-navigation/style-rtl.css 4.03 kB
build/edit-navigation/style.css 4.04 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.08 kB
build/edit-post/style.css 7.08 kB
build/edit-widgets/style-rtl.css 4.39 kB
build/edit-widgets/style.css 4.38 kB
build/editor/index.min.js 38.6 kB
build/editor/style-rtl.css 3.63 kB
build/editor/style.css 3.62 kB
build/element/index.min.js 4.27 kB
build/escape-html/index.min.js 537 B
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.79 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.9 kB
build/notices/index.min.js 945 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/redux-routine/index.min.js 2.69 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.52 kB
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

compressed-size-action

: []
).concat(
__experimentalGetPatternsByBlockTypes(
`core/post-content/${ postType }`
Copy link
Member

Choose a reason for hiding this comment

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

This is a very weird construct to me since it seems to imply the post type is a child of the block type. Why can't we go with a separate key for post types? Seems both clearer and more flexible.

@jorgefilipecosta jorgefilipecosta force-pushed the add/ability-to-use-Page-creation-Patterns-for-custom-post-types branch from 9e4c481 to 375fc44 Compare June 20, 2022 16:31
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 exploring this Jorge!

I think that we should have an API that is not so specific to create page patterns, but instead we should explore a way for postTypes in general. What we might also need is a way to show conditionally patterns based on a template or template type(archive, etc..). So it comes to having an API that will handle which patterns are shown based on context.

I'm not saying right now that we should combine these(it would need exploration), but is something to have in mind.

We shouldn't have the example of 'core/template-part/header' in mind because it's about block types and block variations.

Whatever API we will introduce, I believe it should be a new selector that will handle all the restrictions we impose and have a single source of truth. For example block patterns by block type are shown/requested in specific places to suggest a pattern and these patterns should also be filtered by the postType. Makes sense?

*
* @see WP_REST_Controller
*/
class Gutenberg_REST_Block_Patterns_Controller extends WP_REST_Controller {
Copy link
Contributor

Choose a reason for hiding this comment

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

We need to align with the existing controller in core. This means, I believe we need to move forwards this issue: #40902 and see what we'll need to update. Perhaps something like WP_Theme_JSON_6_1 extends WP_Theme_JSON_6_0 might be needed..

Noting that I didn't check the code here - just some thoughts..

Copy link
Member Author

Choose a reason for hiding this comment

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

Hi @ntsekouras In this PR I'm already aligining the endpoint with core (by accident) private $remote_patterns_loaded; is part of this PR. Basically, I copied this class from core, changed its name, and did the changes I needed. I'm using WordPress filters to overwrite the core class with this new Gutenberg one Following this approach we don't need any extends etc. We are free to apply the changes we need. When backporting the class to core we just copy this file back to the core, change its name, and that's it. I left a comment on @anton-vlasenko PR #40902 (review).

@mtias
Copy link
Member

mtias commented Jun 21, 2022

@ntsekouras @jorgefilipecosta to connect the loop, I proposed a different API for this here: #41398

@ntsekouras
Copy link
Contributor

@ntsekouras @jorgefilipecosta to connect the loop, I proposed a different API for this here: #41398

Yes, that was what I was suggesting 😄

@jorgefilipecosta
Copy link
Member Author

Hi @mtias, @ntsekouras this PR passed by an update to the API.
I introduced a startContentPostTypes property in patterns that allows patterns to explicitly specify the post types where the pattern can be used in the start post modal.
I'm not using a postType property because it seems according to #41398 that the idea of postType property is to restric the postTypes where the pattern can be used. I can implement that property in a parallel PR.
I may have a pattern that I want to make available in all post types but should only be available in the start content modal of Product. Although that pattern is ideal start for a product post it may make sense in certain cases to insert on a page.
Being able to use a pattern in a post type at all and wanting the pattern to appear in the start modal of a post type seem to be different concepts so I think using separate properties opens more possibilities.

But I can change the property to postTypes if we prefer to unify the concepts and not have two properties. The change is very easy I just need to replace startContentPostTypes with postTypes. The downside is that if a pattern is the start content of a postType I will not be able to use it at all in other postTypes.
Let me know your thoughts and thank you in advance for the feedback.

@mcsf
Copy link
Contributor

mcsf commented Jun 21, 2022

Hey @jorgefilipecosta, thanks for presenting these different alternatives.

I vote for just introducing postTypes, per #41398.

I'd rather not rush to commit to a starter-content-related API, and instead make sure we offer simple APIs with clear semantics (like the postType field) and reliable pluggable systems (a proper 'register_block_patterns' server-side action, per #40305, to let admins and plugins make their own rules about which patterns belong where).

@jorgefilipecosta
Copy link
Member Author

Hey @jorgefilipecosta, thanks for presenting these different alternatives.

I vote for just introducing postTypes, per #41398.

I'd rather not rush to commit to a starter-content-related API, and instead make sure we offer simple APIs with clear semantics (like the postType field) and reliable pluggable systems (a proper 'register_block_patterns' server-side action, per #40305, to let admins and plugins make their own rules about which patterns belong where).

Hi @mcsf, so just to make sure we are in agreement, in that case, it is a fair tradeoff and ok that if a pattern is supposed to appear in the start content of a "product" post type it will not be available on any other post type at all?
Page post type is a special case, where by default if a pattern declares "core/post-content" it appears as the start content of pages, and it is still possible to use the pattern in other post types (exactly what already happens now on 6.0 so we are being back-compatible), so the page is the only post type where a pattern can be the start content and also be used in other post types. If one wants to really restrict to pages it is possible to do "postTypes": array('page') like for any other post types.

@mtias
Copy link
Member

mtias commented Jun 21, 2022

it is a fair tradeoff and ok that if a pattern is supposed to appear in the start content of a "product" post type it will not be available on any other post type at all?

Correct. We might want in the future to allow post types to opt-in to starter modal wholesale, like "page" is auto-opted in, but it might also be entirely unnecessary if it's predicated on the patterns. From a pattern perspective, when we say it is restricted to core/post-content we are saying it belongs as direct child of post content. Right now we interpret that as showing up in the starter modal, but also means showing up in the patterns inserter for the root / post-content area. The postType is a parallel property that furthers controls the experience. You should be able to declare patterns that only show up in the post type, and patterns that only show up in that post type + use the start modal. That's why combining postTypes and blockTypes properties is useful.

@jorgefilipecosta
Copy link
Member Author

Thank you @mtias, @mcsf, @ntsekouras this PR was updated following your suggestions and now we have a postTypes property. I'm now implementing as a follow-up the postType restriction part (if a postType is product the pattern will not appear at all for other post types).

@jorgefilipecosta jorgefilipecosta force-pushed the add/ability-to-use-Page-creation-Patterns-for-custom-post-types branch from 7763463 to 808b33c Compare June 21, 2022 14:46
@jorgefilipecosta jorgefilipecosta force-pushed the add/ability-to-use-Page-creation-Patterns-for-custom-post-types branch from 808b33c to 291edce Compare June 21, 2022 15:15
@jorgefilipecosta
Copy link
Member Author

A follow-up PR was proposed at #41842 that implements the postTypes restriction (if a pattern specifies postTypes it will only appear on the postTypes it specifies).
I think both PRs are ready for a review and can be merged.

@@ -0,0 +1,224 @@
<?php
Copy link
Member Author

Choose a reason for hiding this comment

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

Note to reviewers: this file is an exact copy of core with the following changes:

  • class name changed for the Gutenberg prefix.
  • post_types added to the description in public function get_item_schema().
  • 'postTypes' => 'post_types', added to $key in prepare_item_for_response.

There are no other changes to the core file.

@jorgefilipecosta
Copy link
Member Author

All the feedback was applied and some documentation was included.

Copy link
Contributor

@mcsf mcsf left a comment

Choose a reason for hiding this comment

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

🚢

@jorgefilipecosta jorgefilipecosta merged commit 7df592e into trunk Jun 23, 2022
@jorgefilipecosta jorgefilipecosta deleted the add/ability-to-use-Page-creation-Patterns-for-custom-post-types branch June 23, 2022 14:19
@github-actions github-actions bot added this to the Gutenberg 13.6 milestone Jun 23, 2022
@bph bph added the Needs Dev Note Requires a developer note for a major WordPress release cycle label Jun 29, 2022
@femkreations femkreations added the Needs User Documentation Needs new user documentation label Sep 2, 2022
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Sep 20, 2022
…php.

Backports PHP changes in WordPress/gutenberg#41791 to the core. Adds the post types property to the rest API patterns endpoint.

Props mcsf, ntsekouras, matveb.
See #56467.

git-svn-id: https://develop.svn.wordpress.org/trunk@54263 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Sep 20, 2022
…php.

Backports PHP changes in WordPress/gutenberg#41791 to the core. Adds the post types property to the rest API patterns endpoint.

Props mcsf, ntsekouras, matveb.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54263


git-svn-id: http://core.svn.wordpress.org/trunk@53822 1a063a9b-81f0-0310-95a4-ce76da25c4cd
github-actions bot pushed a commit to platformsh/wordpress-performance that referenced this pull request Sep 20, 2022
…php.

Backports PHP changes in WordPress/gutenberg#41791 to the core. Adds the post types property to the rest API patterns endpoint.

Props mcsf, ntsekouras, matveb.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54263


git-svn-id: https://core.svn.wordpress.org/trunk@53822 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@femkreations femkreations removed the Needs User Documentation Needs new user documentation label Oct 3, 2022
@jorgefilipecosta jorgefilipecosta mentioned this pull request Oct 11, 2022
89 tasks
@bph
Copy link
Contributor

bph commented Oct 11, 2022

ootwch pushed a commit to ootwch/wordpress-develop that referenced this pull request Nov 4, 2022
…php.

Backports PHP changes in WordPress/gutenberg#41791 to the core. Adds the post types property to the rest API patterns endpoint.

Props mcsf, ntsekouras, matveb.
See #56467.

git-svn-id: https://develop.svn.wordpress.org/trunk@54263 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Nov 16, 2022
This commit documents the postTypes property part of the block pattern registration added in WordPress/gutenberg#41791, and meanwhile backported into core.

Props mcsf, ntsekouras.
Built from https://develop.svn.wordpress.org/trunk@54850


git-svn-id: http://core.svn.wordpress.org/trunk@54402 1a063a9b-81f0-0310-95a4-ce76da25c4cd
github-actions bot pushed a commit to platformsh/wordpress-performance that referenced this pull request Nov 16, 2022
This commit documents the postTypes property part of the block pattern registration added in WordPress/gutenberg#41791, and meanwhile backported into core.

Props mcsf, ntsekouras.
Built from https://develop.svn.wordpress.org/trunk@54850


git-svn-id: https://core.svn.wordpress.org/trunk@54402 1a063a9b-81f0-0310-95a4-ce76da25c4cd
@simison simison mentioned this pull request Dec 13, 2022
14 tasks
VenusPR added a commit to VenusPR/Wordpress_Richard that referenced this pull request Mar 9, 2023
This commit documents the postTypes property part of the block pattern registration added in WordPress/gutenberg#41791, and meanwhile backported into core.

Props mcsf, ntsekouras.
Built from https://develop.svn.wordpress.org/trunk@54850


git-svn-id: http://core.svn.wordpress.org/trunk@54402 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced 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.

Add ability to use "Page creation Patterns" for custom post types
7 participants