Automattic\WooCommerce\Blocks

BlockPatterns::register_block_patterns()publicWC 1.0

Registers the block patterns and categories under ./patterns/.

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

Хуков нет.

Возвращает

null. Ничего.

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

$BlockPatterns = new BlockPatterns();
$BlockPatterns->register_block_patterns();

Код BlockPatterns::register_block_patterns() WC 7.7.2

public function register_block_patterns() {
	if ( ! class_exists( 'WP_Block_Patterns_Registry' ) ) {
		return;
	}

	$default_headers = array(
		'title'         => 'Title',
		'slug'          => 'Slug',
		'description'   => 'Description',
		'viewportWidth' => 'Viewport Width',
		'categories'    => 'Categories',
		'keywords'      => 'Keywords',
		'blockTypes'    => 'Block Types',
		'inserter'      => 'Inserter',
	);

	if ( ! file_exists( $this->patterns_path ) ) {
		return;
	}

	$files = glob( $this->patterns_path . '/*.php' );
	if ( ! $files ) {
		return;
	}

	foreach ( $files as $file ) {
		$pattern_data = get_file_data( $file, $default_headers );

		if ( empty( $pattern_data['slug'] ) ) {
			_doing_it_wrong(
				'register_block_patterns',
				esc_html(
					sprintf(
					/* translators: %s: file name. */
						__( 'Could not register file "%s" as a block pattern ("Slug" field missing)', 'woocommerce' ),
						$file
					)
				),
				'6.0.0'
			);
			continue;
		}

		if ( ! preg_match( self::SLUG_REGEX, $pattern_data['slug'] ) ) {
			_doing_it_wrong(
				'register_block_patterns',
				esc_html(
					sprintf(
					/* translators: %1s: file name; %2s: slug value found. */
						__( 'Could not register file "%1$s" as a block pattern (invalid slug "%2$s")', 'woocommerce' ),
						$file,
						$pattern_data['slug']
					)
				),
				'6.0.0'
			);
			continue;
		}

		if ( \WP_Block_Patterns_Registry::get_instance()->is_registered( $pattern_data['slug'] ) ) {
			continue;
		}

		// Title is a required property.
		if ( ! $pattern_data['title'] ) {
			_doing_it_wrong(
				'register_block_patterns',
				esc_html(
					sprintf(
					/* translators: %1s: file name; %2s: slug value found. */
						__( 'Could not register file "%s" as a block pattern ("Title" field missing)', 'woocommerce' ),
						$file
					)
				),
				'6.0.0'
			);
			continue;
		}

		// For properties of type array, parse data as comma-separated.
		foreach ( array( 'categories', 'keywords', 'blockTypes' ) as $property ) {
			if ( ! empty( $pattern_data[ $property ] ) ) {
				$pattern_data[ $property ] = array_filter(
					preg_split(
						self::COMMA_SEPARATED_REGEX,
						(string) $pattern_data[ $property ]
					)
				);
			} else {
				unset( $pattern_data[ $property ] );
			}
		}

		// Parse properties of type int.
		foreach ( array( 'viewportWidth' ) as $property ) {
			if ( ! empty( $pattern_data[ $property ] ) ) {
				$pattern_data[ $property ] = (int) $pattern_data[ $property ];
			} else {
				unset( $pattern_data[ $property ] );
			}
		}

		// Parse properties of type bool.
		foreach ( array( 'inserter' ) as $property ) {
			if ( ! empty( $pattern_data[ $property ] ) ) {
				$pattern_data[ $property ] = in_array(
					strtolower( $pattern_data[ $property ] ),
					array( 'yes', 'true' ),
					true
				);
			} else {
				unset( $pattern_data[ $property ] );
			}
		}

		// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText, WordPress.WP.I18n.LowLevelTranslationFunction
		$pattern_data['title'] = translate_with_gettext_context( $pattern_data['title'], 'Pattern title', 'woo-gutenberg-products-block' );
		if ( ! empty( $pattern_data['description'] ) ) {
			// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText, WordPress.WP.I18n.LowLevelTranslationFunction
			$pattern_data['description'] = translate_with_gettext_context( $pattern_data['description'], 'Pattern description', 'woo-gutenberg-products-block' );
		}

		// The actual pattern content is the output of the file.
		ob_start();
		include $file;
		$pattern_data['content'] = ob_get_clean();
		if ( ! $pattern_data['content'] ) {
			continue;
		}

		foreach ( $pattern_data['categories'] as $key => $category ) {
			$category_slug = _wp_to_kebab_case( $category );

			$pattern_data['categories'][ $key ] = $category_slug;

			register_block_pattern_category(
				$category_slug,
				// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralText
				array( 'label' => __( $category, 'woocommerce' ) )
			);
		}

		register_block_pattern( $pattern_data['slug'], $pattern_data );
	}
}