WC_Product_Collection_Block_Tracking::parse_blocks_track_data
Track usage of the Product Collection block within the given blocks.
Method of the class: WC_Product_Collection_Block_Tracking{}
No Hooks.
Returns
Array
. Parsed instances of the Product Collection block.
Usage
// private - for code of main (parent) class only $result = $this->parse_blocks_track_data( $blocks, $is_in_single_product, $is_in_template_part, $is_in_synced_pattern );
- $blocks(array) (required)
- The parsed blocks to check.
- $is_in_single_product(true|false)
- Whether we are in a single product container (used for keeping state in the recurring process).
Default: false - $is_in_template_part(true|false)
- Whether we are in a template part (used for keeping state in the recurring process).
Default: false - $is_in_synced_pattern(true|false)
- Whether we are in a synced block (used for keeping state in the recurring process).
Default: false
WC_Product_Collection_Block_Tracking::parse_blocks_track_data() WC Product Collection Block Tracking::parse blocks track data code WC 9.9.3
private function parse_blocks_track_data( $blocks, $is_in_single_product = false, $is_in_template_part = false, $is_in_synced_pattern = false ) { $instances = array(); if ( ! is_array( $blocks ) || empty( $blocks ) ) { return $instances; } foreach ( $blocks as $block ) { if ( empty( $block['blockName'] ) ) { continue; } if ( 'woocommerce/product-collection' === $block['blockName'] ) { $instances[] = array( 'collection' => $block['attrs']['collection'] ?? 'product-catalog', 'in_single_product' => $is_in_single_product ? 'yes' : 'no', 'in_template_part' => $is_in_template_part ? 'yes' : 'no', 'in_synced_pattern' => $is_in_synced_pattern ? 'yes' : 'no', 'filters' => wp_json_encode( $this->get_query_filters_usage_data( $block ) ), ); } // Track instances within single product container. $local_is_in_single_product = $is_in_single_product; if ( 'woocommerce/single-product' === $block['blockName'] ) { $local_is_in_single_product = true; } // Track instances within template part. // Hint: Supports up to two levels of depth. if ( ! $is_in_synced_pattern && ! $is_in_template_part && 'core/template-part' === $block['blockName'] ) { $template_part_theme = $block['attrs']['theme'] ?? ''; $template_part_slug = $block['attrs']['slug'] ?? ''; $template_part = get_block_template( $template_part_theme . '//' . $template_part_slug, 'wp_template_part' ); if ( $template_part instanceof WP_Block_Template && ! empty( $template_part->content ) ) { // Recursive. $instances = array_merge( $instances, $this->parse_blocks_track_data( parse_blocks( $template_part->content ), $local_is_in_single_product, true, $is_in_synced_pattern ) ); } } // Track instances within synced block. // Hint: Supports up to two levels of depth. if ( ! $is_in_synced_pattern && ! $is_in_template_part && 'core/block' === $block['blockName'] ) { $block_id = $block['attrs']['ref'] ?? 0; $synced_pattern = get_post( $block_id ); if ( $synced_pattern instanceof WP_Post && ! empty( $synced_pattern->post_content ) ) { // Recursive. $instances = array_merge( $instances, $this->parse_blocks_track_data( parse_blocks( $synced_pattern->post_content ), $local_is_in_single_product, $is_in_template_part, true ) ); } } // Recursive. if ( ! empty( $block['innerBlocks'] ) ) { $instances = array_merge( $instances, $this->parse_blocks_track_data( $block['innerBlocks'], $local_is_in_single_product, $is_in_template_part, $is_in_synced_pattern ) ); } } return $instances; }