wp/wp-includes/class-wp-block-patterns-registry.php
changeset 19 3d72ae0968f4
parent 18 be944660c56a
child 21 48c4eec2b7e6
--- 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 ) {