--- a/wp/wp-includes/class-wp-block-patterns-registry.php Wed Sep 21 18:19:35 2022 +0200
+++ b/wp/wp-includes/class-wp-block-patterns-registry.php Tue Sep 27 16:37:53 2022 +0200
@@ -8,20 +8,28 @@
*/
/**
- * Class used for interacting with patterns.
+ * Class used for interacting with block patterns.
*
* @since 5.5.0
*/
final class WP_Block_Patterns_Registry {
/**
- * Registered patterns array.
+ * Registered block patterns array.
*
* @since 5.5.0
- * @var array
+ * @var array[]
*/
private $registered_patterns = array();
/**
+ * Patterns registered outside the `init` action.
+ *
+ * @since 6.0.0
+ * @var array[]
+ */
+ private $registered_patterns_outside_init = array();
+
+ /**
* Container for the main instance of the class.
*
* @since 5.5.0
@@ -30,13 +38,38 @@
private static $instance = null;
/**
- * Registers a pattern.
+ * Registers a block pattern.
*
* @since 5.5.0
+ * @since 5.8.0 Added support for the `blockTypes` property.
*
- * @param string $pattern_name Pattern name including namespace.
- * @param array $pattern_properties Array containing the properties of the pattern: title,
- * content, description, viewportWidth, categories, keywords.
+ * @param string $pattern_name Block pattern name including namespace.
+ * @param array $pattern_properties {
+ * List of properties for the block pattern.
+ *
+ * @type string $title Required. A human-readable title for the pattern.
+ * @type string $content Required. Block HTML markup for the pattern.
+ * @type string $description Optional. Visually hidden text used to describe the pattern in the
+ * inserter. A description is optional, but is strongly
+ * encouraged when the title does not fully describe what the
+ * pattern does. The description will help users discover the
+ * pattern while searching.
+ * @type int $viewportWidth Optional. The intended width of the pattern to allow for a scaled
+ * preview within the pattern inserter.
+ * @type array $categories Optional. A list of registered pattern categories used to group block
+ * patterns. Block patterns can be shown on multiple categories.
+ * A category must be registered separately in order to be used
+ * here.
+ * @type array $blockTypes Optional. A list of block names including namespace that could use
+ * the block pattern in certain contexts (placeholder, transforms).
+ * The block pattern is available in the block editor inserter
+ * regardless of this list of block names.
+ * Certain blocks support further specificity besides the block name
+ * (e.g. for `core/template-part` you can specify areas
+ * like `core/template-part/header` or `core/template-part/footer`).
+ * @type array $keywords Optional. A list of aliases or keywords that help users discover the
+ * pattern while searching.
+ * }
* @return bool True if the pattern was registered with success and false otherwise.
*/
public function register( $pattern_name, $pattern_properties ) {
@@ -67,20 +100,28 @@
return false;
}
- $this->registered_patterns[ $pattern_name ] = array_merge(
+ $pattern = array_merge(
$pattern_properties,
array( 'name' => $pattern_name )
);
+ $this->registered_patterns[ $pattern_name ] = $pattern;
+
+ // If the pattern is registered inside an action other than `init`, store it
+ // also to a dedicated array. Used to detect deprecated registrations inside
+ // `admin_init` or `current_screen`.
+ if ( current_action() && 'init' !== current_action() ) {
+ $this->registered_patterns_outside_init[ $pattern_name ] = $pattern;
+ }
return true;
}
/**
- * Unregisters a pattern.
+ * Unregisters a block pattern.
*
* @since 5.5.0
*
- * @param string $pattern_name Pattern name including namespace.
+ * @param string $pattern_name Block pattern name including namespace.
* @return bool True if the pattern was unregistered with success and false otherwise.
*/
public function unregister( $pattern_name ) {
@@ -95,16 +136,17 @@
}
unset( $this->registered_patterns[ $pattern_name ] );
+ unset( $this->registered_patterns_outside_init[ $pattern_name ] );
return true;
}
/**
- * Retrieves an array containing the properties of a registered pattern.
+ * Retrieves an array containing the properties of a registered block pattern.
*
* @since 5.5.0
*
- * @param string $pattern_name Pattern name including namespace.
+ * @param string $pattern_name Block pattern name including namespace.
* @return array Registered pattern properties.
*/
public function get_registered( $pattern_name ) {
@@ -116,23 +158,28 @@
}
/**
- * Retrieves all registered patterns.
+ * Retrieves all registered block patterns.
*
* @since 5.5.0
*
- * @return array Array of arrays containing the registered patterns properties,
- * and per style.
+ * @param bool $outside_init_only Return only patterns registered outside the `init` action.
+ * @return array[] Array of arrays containing the registered block patterns properties,
+ * and per style.
*/
- public function get_all_registered() {
- return array_values( $this->registered_patterns );
+ public function get_all_registered( $outside_init_only = false ) {
+ return array_values(
+ $outside_init_only
+ ? $this->registered_patterns_outside_init
+ : $this->registered_patterns
+ );
}
/**
- * Checks if a pattern is registered.
+ * Checks if a block pattern is registered.
*
* @since 5.5.0
*
- * @param string $pattern_name Pattern name including namespace.
+ * @param string $pattern_name Block pattern name including namespace.
* @return bool True if the pattern is registered, false otherwise.
*/
public function is_registered( $pattern_name ) {
@@ -158,12 +205,13 @@
}
/**
- * Registers a new pattern.
+ * Registers a new block pattern.
*
* @since 5.5.0
*
- * @param string $pattern_name Pattern name including namespace.
- * @param array $pattern_properties Array containing the properties of the pattern.
+ * @param string $pattern_name Block pattern name including namespace.
+ * @param array $pattern_properties List of properties for the block pattern.
+ * See WP_Block_Patterns_Registry::register() for accepted arguments.
* @return bool True if the pattern was registered with success and false otherwise.
*/
function register_block_pattern( $pattern_name, $pattern_properties ) {
@@ -171,11 +219,11 @@
}
/**
- * Unregisters a pattern.
+ * Unregisters a block pattern.
*
* @since 5.5.0
*
- * @param string $pattern_name Pattern name including namespace.
+ * @param string $pattern_name Block pattern name including namespace.
* @return bool True if the pattern was unregistered with success and false otherwise.
*/
function unregister_block_pattern( $pattern_name ) {