Title: WP_Block_List
Published: August 11, 2020
Last modified: February 24, 2026

---

# class WP_Block_List {}

## In this article

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

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

Class representing a list of block instances.

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

| Name | Description | 
| [WP_Block_List::__construct](https://developer.wordpress.org/reference/classes/wp_block_list/__construct/) | Constructor. | 
| [WP_Block_List::count](https://developer.wordpress.org/reference/classes/wp_block_list/count/) | – | 
| [WP_Block_List::current](https://developer.wordpress.org/reference/classes/wp_block_list/current/) | – | 
| [WP_Block_List::key](https://developer.wordpress.org/reference/classes/wp_block_list/key/) | – | 
| [WP_Block_List::next](https://developer.wordpress.org/reference/classes/wp_block_list/next/) | – | 
| [WP_Block_List::offsetExists](https://developer.wordpress.org/reference/classes/wp_block_list/offsetexists/) | – | 
| [WP_Block_List::offsetGet](https://developer.wordpress.org/reference/classes/wp_block_list/offsetget/) | – | 
| [WP_Block_List::offsetSet](https://developer.wordpress.org/reference/classes/wp_block_list/offsetset/) | – | 
| [WP_Block_List::offsetUnset](https://developer.wordpress.org/reference/classes/wp_block_list/offsetunset/) | – | 
| [WP_Block_List::rewind](https://developer.wordpress.org/reference/classes/wp_block_list/rewind/) | – | 
| [WP_Block_List::valid](https://developer.wordpress.org/reference/classes/wp_block_list/valid/) | – |

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

    ```php
    class WP_Block_List implements Iterator, ArrayAccess, Countable {

    	/**
    	 * Original array of parsed block data, or block instances.
    	 *
    	 * @since 5.5.0
    	 * @var array[]|WP_Block[]
    	 */
    	protected $blocks;

    	/**
    	 * All available context of the current hierarchy.
    	 *
    	 * @since 5.5.0
    	 * @var array
    	 */
    	protected $available_context;

    	/**
    	 * Block type registry to use in constructing block instances.
    	 *
    	 * @since 5.5.0
    	 * @var WP_Block_Type_Registry
    	 */
    	protected $registry;

    	/**
    	 * Constructor.
    	 *
    	 * Populates object properties from the provided block instance argument.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @param array[]|WP_Block[]     $blocks            Array of parsed block data, or block instances.
    	 * @param array                  $available_context Optional array of ancestry context values.
    	 * @param WP_Block_Type_Registry $registry          Optional block type registry.
    	 */
    	public function __construct( $blocks, $available_context = array(), $registry = null ) {
    		if ( ! $registry instanceof WP_Block_Type_Registry ) {
    			$registry = WP_Block_Type_Registry::get_instance();
    		}

    		$this->blocks            = $blocks;
    		$this->available_context = $available_context;
    		$this->registry          = $registry;
    	}

    	/**
    	 * Returns true if a block exists by the specified block offset, or false
    	 * otherwise.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/arrayaccess.offsetexists.php
    	 *
    	 * @param int $offset Offset of block to check for.
    	 * @return bool Whether block exists.
    	 */
    	#[ReturnTypeWillChange]
    	public function offsetExists( $offset ) {
    		return isset( $this->blocks[ $offset ] );
    	}

    	/**
    	 * Returns the value by the specified block offset.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/arrayaccess.offsetget.php
    	 *
    	 * @param int $offset Offset of block value to retrieve.
    	 * @return WP_Block|null Block value if exists, or null.
    	 */
    	#[ReturnTypeWillChange]
    	public function offsetGet( $offset ) {
    		$block = $this->blocks[ $offset ];

    		if ( isset( $block ) && is_array( $block ) ) {
    			$block = new WP_Block( $block, $this->available_context, $this->registry );

    			$this->blocks[ $offset ] = $block;
    		}

    		return $block;
    	}

    	/**
    	 * Assign a block value by the specified block offset.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/arrayaccess.offsetset.php
    	 *
    	 * @param int            $offset Offset of block value to set.
    	 * @param array|WP_Block $value  Block value.
    	 */
    	#[ReturnTypeWillChange]
    	public function offsetSet( $offset, $value ) {
    		if ( is_null( $offset ) ) {
    			$this->blocks[] = $value;
    		} else {
    			$this->blocks[ $offset ] = $value;
    		}
    	}

    	/**
    	 * Unset a block.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/arrayaccess.offsetunset.php
    	 *
    	 * @param int $offset Offset of block value to unset.
    	 */
    	#[ReturnTypeWillChange]
    	public function offsetUnset( $offset ) {
    		unset( $this->blocks[ $offset ] );
    	}

    	/**
    	 * Rewinds back to the first element of the Iterator.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/iterator.rewind.php
    	 */
    	#[ReturnTypeWillChange]
    	public function rewind() {
    		reset( $this->blocks );
    	}

    	/**
    	 * Returns the current element of the block list.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/iterator.current.php
    	 *
    	 * @return WP_Block|null Current element.
    	 */
    	#[ReturnTypeWillChange]
    	public function current() {
    		return $this->offsetGet( $this->key() );
    	}

    	/**
    	 * Returns the key of the current element of the block list.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/iterator.key.php
    	 *
    	 * @return int|null Key of the current element.
    	 */
    	#[ReturnTypeWillChange]
    	public function key() {
    		return key( $this->blocks );
    	}

    	/**
    	 * Moves the current position of the block list to the next element.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/iterator.next.php
    	 */
    	#[ReturnTypeWillChange]
    	public function next() {
    		next( $this->blocks );
    	}

    	/**
    	 * Checks if current position is valid.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/iterator.valid.php
    	 */
    	#[ReturnTypeWillChange]
    	public function valid() {
    		return null !== key( $this->blocks );
    	}

    	/**
    	 * Returns the count of blocks in the list.
    	 *
    	 * @since 5.5.0
    	 *
    	 * @link https://www.php.net/manual/en/countable.count.php
    	 *
    	 * @return int Block count.
    	 */
    	#[ReturnTypeWillChange]
    	public function count() {
    		return count( $this->blocks );
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-block-list.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-block-list.php#L15)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-block-list.php#L15-L211)

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

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

## User Contributed Notes

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