while ( $query->
have_posts() ) { $query->
the_post();
// Get an instance of the current Post Template block.
$block_instance =
$block->parsed_block;
// Set the block name to one that does not correspond to an existing registered block.
// This ensures that for the inner instances of the Post Template block, we do not render any block supports.
$block_instance['blockName'
] = 'core/null';
$post_id =
get_the_ID();
$post_type =
get_post_type();
$filter_block_context =
static function( $context ) use ( $post_id,
$post_type ) { $context['postType'
] =
$post_type;
$context['postId'
] =
$post_id;
return $context;
};
// Use an early priority to so that other 'render_block_context' filters have access to the values.
add_filter( 'render_block_context',
$filter_block_context, 1
);
// Render the inner blocks of the Post Template block with `dynamic` set to `false` to prevent calling
// `render_callback` and ensure that no wrapper markup is included.
$block_content =
( new WP_Block( $block_instance ) )->
render( array
( 'dynamic' => false
) );