WP_Theme::get_block_patterns(): array

In this article

Gets block pattern data for a specified theme.

Description

Each pattern is defined as a PHP file and defines its metadata using plugin-style headers. The minimum required definition is:

/** * Title: My Pattern * Slug: my-theme/my-pattern *

The output of the PHP source corresponds to the content of the pattern, e.g.:

<main><p><?php echo "Hello"; ?></p></main>

If applicable, this will collect from both parent and child theme.

Other settable fields include:

- Description - Viewport Width - Inserter (yes/no) - Categories (comma-separated values) - Keywords (comma-separated values) - Block Types (comma-separated values) - Post Types (comma-separated values) - Template Types (comma-separated values)

Return

array Block pattern data.

Source

public function get_block_patterns() {	$can_use_cached = ! wp_is_development_mode( 'theme' );	$pattern_data = $this->get_pattern_cache();	if ( is_array( $pattern_data ) ) {	if ( $can_use_cached ) {	return $pattern_data;	}	// If in development mode, clear pattern cache.	$this->delete_pattern_cache();	}	$dirpath = $this->get_stylesheet_directory() . '/patterns';	$pattern_data = array();	if ( ! file_exists( $dirpath ) ) {	if ( $can_use_cached ) {	$this->set_pattern_cache( $pattern_data );	}	return $pattern_data;	}	$files = (array) self::scandir( $dirpath, 'php', -1 );	/** * Filters list of block pattern files for a theme. * * @since 6.8.0 * * @param array $files Array of theme files found within `patterns` directory. * @param string $dirpath Path of theme `patterns` directory being scanned. */	$files = apply_filters( 'theme_block_pattern_files', $files, $dirpath );	$dirpath = trailingslashit( $dirpath );	if ( ! $files ) {	if ( $can_use_cached ) {	$this->set_pattern_cache( $pattern_data );	}	return $pattern_data;	}	$default_headers = array(	'title' => 'Title',	'slug' => 'Slug',	'description' => 'Description',	'viewportWidth' => 'Viewport Width',	'inserter' => 'Inserter',	'categories' => 'Categories',	'keywords' => 'Keywords',	'blockTypes' => 'Block Types',	'postTypes' => 'Post Types',	'templateTypes' => 'Template Types',	);	$properties_to_parse = array(	'categories',	'keywords',	'blockTypes',	'postTypes',	'templateTypes',	);	foreach ( $files as $file ) {	$pattern = get_file_data( $file, $default_headers );	if ( empty( $pattern['slug'] ) ) {	_doing_it_wrong(	__FUNCTION__,	sprintf(	/* translators: 1: file name. */	__( 'Could not register file "%s" as a block pattern ("Slug" field missing)' ),	$file	),	'6.0.0'	);	continue;	}	if ( ! preg_match( '/^[A-z0-9\/_-]+$/', $pattern['slug'] ) ) {	_doing_it_wrong(	__FUNCTION__,	sprintf(	/* translators: 1: file name; 2: slug value found. */	__( 'Could not register file "%1$s" as a block pattern (invalid slug "%2$s")' ),	$file,	$pattern['slug']	),	'6.0.0'	);	}	// Title is a required property.	if ( ! $pattern['title'] ) {	_doing_it_wrong(	__FUNCTION__,	sprintf(	/* translators: 1: file name. */	__( 'Could not register file "%s" as a block pattern ("Title" field missing)' ),	$file	),	'6.0.0'	);	continue;	}	// For properties of type array, parse data as comma-separated.	foreach ( $properties_to_parse as $property ) {	if ( ! empty( $pattern[ $property ] ) ) {	$pattern[ $property ] = array_filter( wp_parse_list( (string) $pattern[ $property ] ) );	} else {	unset( $pattern[ $property ] );	}	}	// Parse properties of type int.	$property = 'viewportWidth';	if ( ! empty( $pattern[ $property ] ) ) {	$pattern[ $property ] = (int) $pattern[ $property ];	} else {	unset( $pattern[ $property ] );	}	// Parse properties of type bool.	$property = 'inserter';	if ( ! empty( $pattern[ $property ] ) ) {	$pattern[ $property ] = in_array(	strtolower( $pattern[ $property ] ),	array( 'yes', 'true' ),	true	);	} else {	unset( $pattern[ $property ] );	}	$key = str_replace( $dirpath, '', $file );	$pattern_data[ $key ] = $pattern;	}	if ( $can_use_cached ) {	$this->set_pattern_cache( $pattern_data );	}	return $pattern_data; } 

Hooks

apply_filters( ‘theme_block_pattern_files’, array $files, string $dirpath )

Filters list of block pattern files for a theme.

Changelog

VersionDescription
6.4.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.