Skip to content

Commit 7d32ca9

Browse files
committed
Send only patterns registered outside init in editor HTML
1 parent 2374e42 commit 7d32ca9

4 files changed

Lines changed: 55 additions & 10 deletions

File tree

src/wp-admin/edit-form-blocks.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ static function( $classes ) {
202202
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
203203
),
204204
'supportsLayout' => WP_Theme_JSON_Resolver::theme_has_support(),
205-
'__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered(),
206-
'__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(),
205+
'__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ),
206+
'__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ),
207207
'supportsTemplateMode' => current_theme_supports( 'block-templates' ),
208208

209209
// Whether or not to load the 'postcustom' meta box is stored as a user meta

src/wp-admin/site-editor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ static function( $classes ) {
6767
'defaultTemplateTypes' => $indexed_template_types,
6868
'defaultTemplatePartAreas' => get_allowed_block_template_part_areas(),
6969
'__unstableHomeTemplate' => $home_template,
70-
'__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered(),
71-
'__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(),
70+
'__experimentalBlockPatterns' => WP_Block_Patterns_Registry::get_instance()->get_all_registered( true ),
71+
'__experimentalBlockPatternCategories' => WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered( true ),
7272
);
7373
$editor_settings = get_block_editor_settings( $custom_settings, $block_editor_context );
7474

src/wp-includes/class-wp-block-pattern-categories-registry.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ final class WP_Block_Pattern_Categories_Registry {
1919
*/
2020
private $registered_categories = array();
2121

22+
/**
23+
* Pattern categories registered outside the `init` action.
24+
*
25+
* @since 6.0.0
26+
* @var array[]
27+
*/
28+
private $registered_categories_outside_init = array();
29+
2230
/**
2331
* Container for the main instance of the class.
2432
*
@@ -50,11 +58,20 @@ public function register( $category_name, $category_properties ) {
5058
return false;
5159
}
5260

53-
$this->registered_categories[ $category_name ] = array_merge(
61+
$category = array_merge(
5462
array( 'name' => $category_name ),
5563
$category_properties
5664
);
5765

66+
$this->registered_categories[ $category_name ] = $category;
67+
68+
// If the category is registered inside an action other than `init`, store it
69+
// also to a dedicated array. Used to detect deprecated registrations inside
70+
// `admin_init` or `current_screen`.
71+
if ( current_action() && 'init' !== current_action() ) {
72+
$this->registered_categories_outside_init[ $category_name ] = $category;
73+
}
74+
5875
return true;
5976
}
6077

@@ -78,6 +95,7 @@ public function unregister( $category_name ) {
7895
}
7996

8097
unset( $this->registered_categories[ $category_name ] );
98+
unset( $this->registered_categories_outside_init[ $category_name ] );
8199

82100
return true;
83101
}
@@ -103,10 +121,15 @@ public function get_registered( $category_name ) {
103121
*
104122
* @since 5.5.0
105123
*
124+
* @param bool $outside_init_only Return only categories registered outside the `init` action.
106125
* @return array[] Array of arrays containing the registered pattern categories properties.
107126
*/
108-
public function get_all_registered() {
109-
return array_values( $this->registered_categories );
127+
public function get_all_registered( $outside_init_only = false ) {
128+
return array_values(
129+
$outside_init_only
130+
? $this->registered_categories_outside_init
131+
: $this->registered_categories
132+
);
110133
}
111134

112135
/**

src/wp-includes/class-wp-block-patterns-registry.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ final class WP_Block_Patterns_Registry {
2121
*/
2222
private $registered_patterns = array();
2323

24+
/**
25+
* Patterns registered outside the `init` action.
26+
*
27+
* @since 6.0.0
28+
* @var array[]
29+
*/
30+
private $registered_patterns_outside_init = array();
31+
2432
/**
2533
* Container for the main instance of the class.
2634
*
@@ -92,10 +100,18 @@ public function register( $pattern_name, $pattern_properties ) {
92100
return false;
93101
}
94102

95-
$this->registered_patterns[ $pattern_name ] = array_merge(
103+
$pattern = array_merge(
96104
$pattern_properties,
97105
array( 'name' => $pattern_name )
98106
);
107+
$this->registered_patterns[ $pattern_name ] = $pattern;
108+
109+
// If the pattern is registered inside an action other than `init`, store it
110+
// also to a dedicated array. Used to detect deprecated registrations inside
111+
// `admin_init` or `current_screen`.
112+
if ( current_action() && 'init' !== current_action() ) {
113+
$this->registered_patterns_outside_init[ $pattern_name ] = $pattern;
114+
}
99115

100116
return true;
101117
}
@@ -120,6 +136,7 @@ public function unregister( $pattern_name ) {
120136
}
121137

122138
unset( $this->registered_patterns[ $pattern_name ] );
139+
unset( $this->registered_patterns_outside_init[ $pattern_name ] );
123140

124141
return true;
125142
}
@@ -145,11 +162,16 @@ public function get_registered( $pattern_name ) {
145162
*
146163
* @since 5.5.0
147164
*
165+
* @param bool $outside_init_only Return only patterns registered outside the `init` action.
148166
* @return array[] Array of arrays containing the registered block patterns properties,
149167
* and per style.
150168
*/
151-
public function get_all_registered() {
152-
return array_values( $this->registered_patterns );
169+
public function get_all_registered( $outside_init_only = false ) {
170+
return array_values(
171+
$outside_init_only
172+
? $this->registered_patterns_outside_init
173+
: $this->registered_patterns
174+
);
153175
}
154176

155177
/**

0 commit comments

Comments
 (0)