parsed_block['innerBlocks'] ) ? (array) $block->parsed_block['innerBlocks'] : array(); // Block wrapper attrs carry native-supports classes / styles / anchor id + // author-supplied className. We append IAPI attrs inline so the region // lives on a single element, giving view.js a clean swap target. $airowp_wrapper_attrs = get_block_wrapper_attributes( array( 'class' => 'airo-wp-query airo-wp-query-region airo-wp-query--source-' . sanitize_key( (string) ( $attributes['source'] ?? 'posts' ) ), ) ); echo airowp_query_render_container( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- assembled from WP_Block->render() output + esc_attr()-escaped parts. (array) $attributes, $airowp_parsed_children, $airowp_page, $airowp_query_id, $airowp_wrapper_attrs, (array) ( $block->context ?? array() ), class_exists( 'airo-wp\\Blocks\\Query\\RefreshSource' ) ? \airo-wp\Blocks\Query\RefreshSource::current_content_post_id() : 0 );