summaryrefslogtreecommitdiffstats
path: root/wp-includes/blocks/block.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/blocks/block.php')
-rw-r--r--wp-includes/blocks/block.php42
1 files changed, 42 insertions, 0 deletions
diff --git a/wp-includes/blocks/block.php b/wp-includes/blocks/block.php
index d51b35d..4886373 100644
--- a/wp-includes/blocks/block.php
+++ b/wp-includes/blocks/block.php
@@ -46,8 +46,50 @@ function render_block_core_block( $attributes ) {
$content = $wp_embed->run_shortcode( $reusable_block->post_content );
$content = $wp_embed->autoembed( $content );
+ // Back compat.
+ // For blocks that have not been migrated in the editor, add some back compat
+ // so that front-end rendering continues to work.
+
+ // This matches the `v2` deprecation. Removes the inner `values` property
+ // from every item.
+ if ( isset( $attributes['content'] ) ) {
+ foreach ( $attributes['content'] as &$content_data ) {
+ if ( isset( $content_data['values'] ) ) {
+ $is_assoc_array = is_array( $content_data['values'] ) && ! wp_is_numeric_array( $content_data['values'] );
+
+ if ( $is_assoc_array ) {
+ $content_data = $content_data['values'];
+ }
+ }
+ }
+ }
+
+ // This matches the `v1` deprecation. Rename `overrides` to `content`.
+ if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) {
+ $attributes['content'] = $attributes['overrides'];
+ }
+
+ /**
+ * We set the `pattern/overrides` context through the `render_block_context`
+ * filter so that it is available when a pattern's inner blocks are
+ * rendering via do_blocks given it only receives the inner content.
+ */
+ $has_pattern_overrides = isset( $attributes['content'] );
+ if ( $has_pattern_overrides ) {
+ $filter_block_context = static function ( $context ) use ( $attributes ) {
+ $context['pattern/overrides'] = $attributes['content'];
+ return $context;
+ };
+ add_filter( 'render_block_context', $filter_block_context, 1 );
+ }
+
$content = do_blocks( $content );
unset( $seen_refs[ $attributes['ref'] ] );
+
+ if ( $has_pattern_overrides ) {
+ remove_filter( 'render_block_context', $filter_block_context, 1 );
+ }
+
return $content;
}