Changeset 12351
- Timestamp:
- 12/20/2022 05:41:00 AM (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wp-themes.com/public_html/wp-content/plugins/pattern-page/inc/pattern-endpoint.php
r12349 r12351 3 3 namespace WordPressdotorg\PatternPreview\PatternEndpoint; 4 4 5 /** 6 * Recurses the blocks and returns block names. 7 * 8 * @param WP_Block $block 9 * @param array $names 10 * @return array List of block names. 11 */ 12 function get_all_block_names( $block, $names = array() ) { 13 // HTML blocks can have a null block name 14 // It won't have any innerBlocks. 15 if ( empty( $block['blockName'] ) ) { 16 return $names; 17 } 18 19 $names[] = $block['blockName']; 20 21 // Blocks have inner blocks that we need to recurse through 22 foreach ( $block['innerBlocks'] as $inner_block ) { 23 return get_all_block_names( $inner_block, $names ); 24 } 25 26 return $names; 27 } 28 29 /** 30 * Return whether the block or its innerBlocks contains a non core block. 31 * 32 * @param WP_Block $block 33 * @return boolean 34 */ 35 function has_unsupported_block( $block ) { 36 $block_names = get_all_block_names( $block ); 37 38 // We only want "core" blocks. 39 $unsupported = array_filter( 40 $block_names, 41 function ( $block_name ) { 42 return ! str_starts_with( $block_name, 'core' ); 43 } 44 ); 45 46 return ! empty( $unsupported ); 47 } 48 49 /** 50 * Returns patterns that only contain core blocks. 51 * 52 * @param array[] $patterns List of block patterns 53 * @return array[] 54 */ 55 function get_supported_patterns( $patterns ) { 56 $supported_patterns = array(); 57 58 foreach ( $patterns as $pattern ) { 59 $blocks = parse_blocks( $pattern['content'] ); 60 $is_supported = true; 61 62 // Filter out any core patterns 63 if ( str_starts_with( $pattern['name'], 'core/' ) ) { 64 $is_supported = false; 65 } 66 67 // Filter out any "no inserter" patterns 68 if ( isset( $pattern['inserter'] ) && false === $pattern['inserter'] ) { 69 $is_supported = false; 70 } 71 72 // Filter out patterns with unsupported blocks 73 foreach ( $blocks as $block ) { 74 if ( has_unsupported_block( $block ) ) { 75 $is_supported = false; 76 } 77 } 78 79 if ( $is_supported ) { 80 $supported_patterns[] = $pattern; 81 } 82 } 83 84 return $supported_patterns; 85 } 86 5 87 function endpoint_handler() { 6 88 $patterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered(); 7 8 $theme_patterns = array_filter( 9 $patterns, 10 function ( $pattern ) { 11 return ! str_starts_with( $pattern['name'], 'core/' ) && ( ! isset( $pattern['inserter'] ) || false !== $pattern['inserter'] ); 12 } 13 ); 89 $theme_patterns = get_supported_patterns( $patterns ); 14 90 15 91 /**
Note: See TracChangeset
for help on using the changeset viewer.