Title: WP_Icon_Collections_Registry
Published: August 20, 2026

---

# class WP_Icon_Collections_Registry {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#description)
 * [Methods](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#source)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#wp--skip-link--target)

Core class used for interacting with registered icon collections.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#description)󠁿

Icons are always associated with a single collection. Collections act as a namespace
for icons and allow grouping icons coming from different sources (e.g. core, Font
Awesome, Google Material Icons).

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#methods)󠁿

| Name | Description | 
| [WP_Icon_Collections_Registry::get_all_registered](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/get_all_registered/) | Retrieves all registered icon collections. | 
| [WP_Icon_Collections_Registry::get_instance](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/get_instance/) | Utility method to retrieve the main instance of the class. | 
| [WP_Icon_Collections_Registry::get_registered](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/get_registered/) | Retrieves an array containing the properties of a registered icon collection. | 
| [WP_Icon_Collections_Registry::is_registered](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/is_registered/) | Checks if an icon collection is registered. | 
| [WP_Icon_Collections_Registry::register](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/register/) | Registers an icon collection. | 
| [WP_Icon_Collections_Registry::unregister](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/unregister/) | Unregisters an icon collection. |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#source)󠁿

    ```php
    class WP_Icon_Collections_Registry {

    	/**
    	 * Registered icon collections array.
    	 *
    	 * @since 7.1.0
    	 * @var array[]
    	 */
    	protected $registered_collections = array();

    	/**
    	 * Container for the main instance of the class.
    	 *
    	 * @since 7.1.0
    	 * @var WP_Icon_Collections_Registry|null
    	 */
    	protected static $instance = null;

    	/**
    	 * Registers an icon collection.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @param string $collection_slug       Icon collection slug.
    	 * @param array  $collection_properties {
    	 *     List of properties for the icon collection.
    	 *
    	 *     @type string $label       Required. A human-readable label for the icon collection.
    	 *     @type string $description Optional. A human-readable description for the icon collection.
    	 * }
    	 * @return bool True if the collection was registered successfully, false otherwise.
    	 */
    	public function register( $collection_slug, $collection_properties ) {
    		if ( ! isset( $collection_slug ) || ! is_string( $collection_slug ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection slug must be a string.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		if ( ! preg_match( '/^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$/', $collection_slug ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection slug must start and end with a lowercase letter or digit and contain only lowercase letters, digits, hyphens, and underscores.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		if ( $this->is_registered( $collection_slug ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection is already registered.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		if ( ! is_array( $collection_properties ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection properties must be an array.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		$allowed_keys = array_fill_keys( array( 'label', 'description' ), 1 );
    		foreach ( array_keys( $collection_properties ) as $key ) {
    			if ( ! array_key_exists( $key, $allowed_keys ) ) {
    				_doing_it_wrong(
    					__METHOD__,
    					sprintf(
    						/* translators: %s: The name of a user-provided key. */
    						__( 'Invalid icon collection property: "%s".' ),
    						$key
    					),
    					'7.1.0'
    				);
    				return false;
    			}
    		}

    		if ( ! isset( $collection_properties['label'] ) || ! is_string( $collection_properties['label'] ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection label must be a string.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		if ( isset( $collection_properties['description'] ) && ! is_string( $collection_properties['description'] ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				__( 'Icon collection description must be a string.' ),
    				'7.1.0'
    			);
    			return false;
    		}

    		$defaults = array(
    			'description' => '',
    		);

    		$collection = array_merge(
    			$defaults,
    			$collection_properties,
    			array( 'slug' => $collection_slug )
    		);

    		$this->registered_collections[ $collection_slug ] = $collection;

    		return true;
    	}

    	/**
    	 * Unregisters an icon collection.
    	 *
    	 * Any icons registered under the given collection are also unregistered.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @param string $collection_slug Icon collection slug.
    	 * @return bool True if the collection was unregistered successfully, false otherwise.
    	 */
    	public function unregister( $collection_slug ) {
    		if ( ! $this->is_registered( $collection_slug ) ) {
    			_doing_it_wrong(
    				__METHOD__,
    				sprintf(
    					/* translators: %s: Icon collection slug. */
    					__( 'Icon collection "%s" not found.' ),
    					$collection_slug
    				),
    				'7.1.0'
    			);
    			return false;
    		}

    		$icons_registry = WP_Icons_Registry::get_instance();
    		foreach ( $icons_registry->get_registered_icons() as $icon ) {
    			if ( isset( $icon['collection'] ) && $icon['collection'] === $collection_slug ) {
    				$icons_registry->unregister( $icon['name'] );
    			}
    		}

    		unset( $this->registered_collections[ $collection_slug ] );

    		return true;
    	}

    	/**
    	 * Retrieves an array containing the properties of a registered icon collection.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @param string $collection_slug Icon collection slug.
    	 * @return array|null Registered collection properties, or `null` if the collection is not registered.
    	 */
    	public function get_registered( $collection_slug ) {
    		if ( ! $this->is_registered( $collection_slug ) ) {
    			return null;
    		}

    		return $this->registered_collections[ $collection_slug ];
    	}

    	/**
    	 * Retrieves all registered icon collections.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @return array[] Array of arrays containing the registered icon collections properties.
    	 */
    	public function get_all_registered() {
    		return array_values( $this->registered_collections );
    	}

    	/**
    	 * Checks if an icon collection is registered.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @param string|null $collection_slug Icon collection slug.
    	 * @return bool True if the icon collection is registered, false otherwise.
    	 */
    	public function is_registered( $collection_slug ) {
    		return isset( $collection_slug, $this->registered_collections[ $collection_slug ] );
    	}

    	/**
    	 * Utility method to retrieve the main instance of the class.
    	 *
    	 * The instance will be created if it does not exist yet.
    	 *
    	 * @since 7.1.0
    	 *
    	 * @return WP_Icon_Collections_Registry The main instance.
    	 */
    	public static function get_instance() {
    		if ( null === self::$instance ) {
    			self::$instance = new self();
    		}

    		return self::$instance;
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-icon-collections-registry.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/class-wp-icon-collections-registry.php#L18)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/class-wp-icon-collections-registry.php#L18-L227)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_icon_collections_registry/?output_format=md#changelog)󠁿

| Version | Description | 
| [7.1.0](https://developer.wordpress.org/reference/since/7.1.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_icon_collections_registry%2F)
before being able to contribute a note or feedback.