[ Index ] |
PHP Cross Reference of WordPress |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Blocks API: WP_Block_Type_Registry class 4 * 5 * @package WordPress 6 * @subpackage Blocks 7 * @since 5.0.0 8 */ 9 10 /** 11 * Core class used for interacting with block types. 12 * 13 * @since 5.0.0 14 */ 15 final class WP_Block_Type_Registry { 16 /** 17 * Registered block types, as `$name => $instance` pairs. 18 * 19 * @since 5.0.0 20 * @var WP_Block_Type[] 21 */ 22 private $registered_block_types = array(); 23 24 /** 25 * Container for the main instance of the class. 26 * 27 * @since 5.0.0 28 * @var WP_Block_Type_Registry|null 29 */ 30 private static $instance = null; 31 32 /** 33 * Registers a block type. 34 * 35 * @since 5.0.0 36 * 37 * @see WP_Block_Type::__construct() 38 * 39 * @param string|WP_Block_Type $name Block type name including namespace, or alternatively 40 * a complete WP_Block_Type instance. In case a WP_Block_Type 41 * is provided, the $args parameter will be ignored. 42 * @param array $args Optional. Array of block type arguments. Accepts any public property 43 * of `WP_Block_Type`. See WP_Block_Type::__construct() for information 44 * on accepted arguments. Default empty array. 45 * @return WP_Block_Type|false The registered block type on success, or false on failure. 46 */ 47 public function register( $name, $args = array() ) { 48 $block_type = null; 49 if ( $name instanceof WP_Block_Type ) { 50 $block_type = $name; 51 $name = $block_type->name; 52 } 53 54 if ( ! is_string( $name ) ) { 55 _doing_it_wrong( 56 __METHOD__, 57 __( 'Block type names must be strings.' ), 58 '5.0.0' 59 ); 60 return false; 61 } 62 63 if ( preg_match( '/[A-Z]+/', $name ) ) { 64 _doing_it_wrong( 65 __METHOD__, 66 __( 'Block type names must not contain uppercase characters.' ), 67 '5.0.0' 68 ); 69 return false; 70 } 71 72 $name_matcher = '/^[a-z0-9-]+\/[a-z0-9-]+$/'; 73 if ( ! preg_match( $name_matcher, $name ) ) { 74 _doing_it_wrong( 75 __METHOD__, 76 __( 'Block type names must contain a namespace prefix. Example: my-plugin/my-custom-block-type' ), 77 '5.0.0' 78 ); 79 return false; 80 } 81 82 if ( $this->is_registered( $name ) ) { 83 _doing_it_wrong( 84 __METHOD__, 85 /* translators: %s: Block name. */ 86 sprintf( __( 'Block type "%s" is already registered.' ), $name ), 87 '5.0.0' 88 ); 89 return false; 90 } 91 92 if ( ! $block_type ) { 93 $block_type = new WP_Block_Type( $name, $args ); 94 } 95 96 $this->registered_block_types[ $name ] = $block_type; 97 98 return $block_type; 99 } 100 101 /** 102 * Unregisters a block type. 103 * 104 * @since 5.0.0 105 * 106 * @param string|WP_Block_Type $name Block type name including namespace, or alternatively 107 * a complete WP_Block_Type instance. 108 * @return WP_Block_Type|false The unregistered block type on success, or false on failure. 109 */ 110 public function unregister( $name ) { 111 if ( $name instanceof WP_Block_Type ) { 112 $name = $name->name; 113 } 114 115 if ( ! $this->is_registered( $name ) ) { 116 _doing_it_wrong( 117 __METHOD__, 118 /* translators: %s: Block name. */ 119 sprintf( __( 'Block type "%s" is not registered.' ), $name ), 120 '5.0.0' 121 ); 122 return false; 123 } 124 125 $unregistered_block_type = $this->registered_block_types[ $name ]; 126 unset( $this->registered_block_types[ $name ] ); 127 128 return $unregistered_block_type; 129 } 130 131 /** 132 * Retrieves a registered block type. 133 * 134 * @since 5.0.0 135 * 136 * @param string $name Block type name including namespace. 137 * @return WP_Block_Type|null The registered block type, or null if it is not registered. 138 */ 139 public function get_registered( $name ) { 140 if ( ! $this->is_registered( $name ) ) { 141 return null; 142 } 143 144 return $this->registered_block_types[ $name ]; 145 } 146 147 /** 148 * Retrieves all registered block types. 149 * 150 * @since 5.0.0 151 * 152 * @return WP_Block_Type[] Associative array of `$block_type_name => $block_type` pairs. 153 */ 154 public function get_all_registered() { 155 return $this->registered_block_types; 156 } 157 158 /** 159 * Checks if a block type is registered. 160 * 161 * @since 5.0.0 162 * 163 * @param string $name Block type name including namespace. 164 * @return bool True if the block type is registered, false otherwise. 165 */ 166 public function is_registered( $name ) { 167 return isset( $this->registered_block_types[ $name ] ); 168 } 169 170 /** 171 * Utility method to retrieve the main instance of the class. 172 * 173 * The instance will be created if it does not exist yet. 174 * 175 * @since 5.0.0 176 * 177 * @return WP_Block_Type_Registry The main instance. 178 */ 179 public static function get_instance() { 180 if ( null === self::$instance ) { 181 self::$instance = new self(); 182 } 183 184 return self::$instance; 185 } 186 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Dec 22 01:00:02 2024 | Cross-referenced by PHPXref 0.7.1 |