class-wp-block-pattern-categories-registry.php (4289B)
1 <?php 2 /** 3 * Blocks API: WP_Block_Pattern_Categories_Registry class 4 * 5 * @package WordPress 6 * @subpackage Blocks 7 * @since 5.5.0 8 */ 9 10 /** 11 * Class used for interacting with block pattern categories. 12 */ 13 final class WP_Block_Pattern_Categories_Registry { 14 /** 15 * Registered block pattern categories array. 16 * 17 * @since 5.5.0 18 * @var array 19 */ 20 private $registered_categories = array(); 21 22 /** 23 * Container for the main instance of the class. 24 * 25 * @since 5.5.0 26 * @var WP_Block_Pattern_Categories_Registry|null 27 */ 28 private static $instance = null; 29 30 /** 31 * Registers a pattern category. 32 * 33 * @since 5.5.0 34 * 35 * @param string $category_name Pattern category name including namespace. 36 * @param array $category_properties Array containing the properties of the category: label. 37 * @return bool True if the pattern was registered with success and false otherwise. 38 */ 39 public function register( $category_name, $category_properties ) { 40 if ( ! isset( $category_name ) || ! is_string( $category_name ) ) { 41 _doing_it_wrong( 42 __METHOD__, 43 __( 'Block pattern category name must be a string.' ), 44 '5.5.0' 45 ); 46 return false; 47 } 48 49 $this->registered_categories[ $category_name ] = array_merge( 50 array( 'name' => $category_name ), 51 $category_properties 52 ); 53 54 return true; 55 } 56 57 /** 58 * Unregisters a pattern category. 59 * 60 * @since 5.5.0 61 * 62 * @param string $category_name Pattern category name including namespace. 63 * @return bool True if the pattern was unregistered with success and false otherwise. 64 */ 65 public function unregister( $category_name ) { 66 if ( ! $this->is_registered( $category_name ) ) { 67 _doing_it_wrong( 68 __METHOD__, 69 /* translators: %s: Block pattern name. */ 70 sprintf( __( 'Block pattern category "%s" not found.' ), $category_name ), 71 '5.5.0' 72 ); 73 return false; 74 } 75 76 unset( $this->registered_categories[ $category_name ] ); 77 78 return true; 79 } 80 81 /** 82 * Retrieves an array containing the properties of a registered pattern category. 83 * 84 * @since 5.5.0 85 * 86 * @param string $category_name Pattern category name including namespace. 87 * @return array Registered pattern properties. 88 */ 89 public function get_registered( $category_name ) { 90 if ( ! $this->is_registered( $category_name ) ) { 91 return null; 92 } 93 94 return $this->registered_categories[ $category_name ]; 95 } 96 97 /** 98 * Retrieves all registered pattern categories. 99 * 100 * @since 5.5.0 101 * 102 * @return array Array of arrays containing the registered pattern categories properties. 103 */ 104 public function get_all_registered() { 105 return array_values( $this->registered_categories ); 106 } 107 108 /** 109 * Checks if a pattern category is registered. 110 * 111 * @since 5.5.0 112 * 113 * @param string $category_name Pattern category name including namespace. 114 * @return bool True if the pattern category is registered, false otherwise. 115 */ 116 public function is_registered( $category_name ) { 117 return isset( $this->registered_categories[ $category_name ] ); 118 } 119 120 /** 121 * Utility method to retrieve the main instance of the class. 122 * 123 * The instance will be created if it does not exist yet. 124 * 125 * @since 5.5.0 126 * 127 * @return WP_Block_Pattern_Categories_Registry The main instance. 128 */ 129 public static function get_instance() { 130 if ( null === self::$instance ) { 131 self::$instance = new self(); 132 } 133 134 return self::$instance; 135 } 136 } 137 138 /** 139 * Registers a new pattern category. 140 * 141 * @since 5.5.0 142 * 143 * @param string $category_name Pattern category name including namespace. 144 * @param array $category_properties Array containing the properties of the category. 145 * @return bool True if the pattern category was registered with success and false otherwise. 146 */ 147 function register_block_pattern_category( $category_name, $category_properties ) { 148 return WP_Block_Pattern_Categories_Registry::get_instance()->register( $category_name, $category_properties ); 149 } 150 151 /** 152 * Unregisters a pattern category. 153 * 154 * @since 5.5.0 155 * 156 * @param string $category_name Pattern category name including namespace. 157 * @return bool True if the pattern category was unregistered with success and false otherwise. 158 */ 159 function unregister_block_pattern_category( $category_name ) { 160 return WP_Block_Pattern_Categories_Registry::get_instance()->unregister( $category_name ); 161 }