diff -r be944660c56a -r 3d72ae0968f4 wp/wp-includes/class-wp-block-patterns-registry.php --- 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 ) {