get_all_registered(); foreach ( $block_patterns as $block_pattern ) { if ( ! isset( $block_pattern['categories'] ) ) { continue; } foreach ( $block_pattern['categories'] as $category ) { $categories = wp_list_pluck( WP_Block_Pattern_Categories_Registry::get_instance()->get_all_registered(), 'name' ); if ( in_array( $category, $categories, true ) ) { continue; } register_block_pattern_category( $category, [ 'label' => ucfirst( $category ), ] ); } } } /** * Parses and registers block pattern from PHP file with header comment. * * @since 0.0.8 * * @param string $file Path to PHP file. * * @return void */ function register_block_pattern_from_file( string $file ): void { $headers = get_file_data( $file, [ 'title' => 'Title', 'slug' => 'Slug', 'categories' => 'Categories', 'block_types' => 'Block Types', 'post_types' => 'Post Types', 'inserter' => 'Inserter', 'keywords' => 'Keywords', 'viewportWidth' => 'Viewport Width', ] ); $categories = explode( ',', $headers['categories'] ); [ $category ] = $categories; $category = trim( sanitize_title_with_dashes( $category ) ); ob_start(); include $file; $content = ob_get_clean(); $content = str_replace( str_between( '', $content ), '', $content ); $pattern = [ 'title' => $headers['title'], 'content' => $content, 'categories' => $categories, ]; if ( $headers['block_types'] ) { $pattern['blockTypes'] = $headers['block_types']; } if ( $headers['post_types'] ) { $pattern['postTypes'] = $headers['post_types']; } if ( $headers['inserter'] ) { $pattern['inserter'] = $headers['inserter']; } if ( $category === 'template' ) { $pattern['inserter'] = false; } foreach ( $categories as $category ) { register_block_pattern_category( $category, [ 'label' => ucwords( $category ), ] ); } // @phpstan-ignore-next-line register_block_pattern( $headers['slug'], $pattern ); }