WP_Theme::get_block_patterns()publicWP 6.4.0

Gets block pattern data for a specified theme. 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)

Метод класса: WP_Theme{}

Хуков нет.

Возвращает

Массив. Block pattern data.

Использование

$WP_Theme = new WP_Theme();
$WP_Theme->get_block_patterns();

Список изменений

С версии 6.4.0 Введена.

Код WP_Theme::get_block_patterns() WP 6.6.2

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 = glob( $dirpath . '*.php' );
	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;
}