Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection
Controller::disable_enhanced_pagination()
Check inner blocks of Product Collection block if there's one incompatible with the Interactivity API and if so, disable client-side navigation.
Method of the class: Controller{}
No Hooks.
Return
String
. Returns the parsed block, unmodified.
Usage
$Controller = new Controller(); $Controller->disable_enhanced_pagination( $parsed_block );
- $parsed_block(array) (required)
- The block being rendered.
Controller::disable_enhanced_pagination() Controller::disable enhanced pagination code WC 9.6.0
public function disable_enhanced_pagination( $parsed_block ) { static $enhanced_query_stack = array(); static $dirty_enhanced_queries = array(); static $render_product_collection_callback = null; $block_name = $parsed_block['blockName']; $is_product_collection_block = $parsed_block['attrs']['query']['isProductCollectionBlock'] ?? false; $force_page_reload_global = $parsed_block['attrs']['forcePageReload'] ?? false && isset( $parsed_block['attrs']['queryId'] ); if ( $is_product_collection_block && 'woocommerce/product-collection' === $block_name && ! $force_page_reload_global ) { $enhanced_query_stack[] = $parsed_block['attrs']['queryId']; if ( ! isset( $render_product_collection_callback ) ) { /** * Filter that disables the enhanced pagination feature during block * rendering when a plugin block has been found inside. It does so * by adding an attribute called `data-wp-navigation-disabled` which * is later handled by the front-end logic. * * @param string $content The block content. * @param array $block The full block, including name and attributes. * @return string Returns the modified output of the query block. */ $render_product_collection_callback = static function ( $content, $block ) use ( &$enhanced_query_stack, &$dirty_enhanced_queries, &$render_product_collection_callback ) { $force_page_reload = $parsed_block['attrs']['forcePageReload'] ?? false && isset( $block['attrs']['queryId'] ); if ( $force_page_reload ) { return $content; } if ( isset( $dirty_enhanced_queries[ $block['attrs']['queryId'] ] ) ) { $p = new \WP_HTML_Tag_Processor( $content ); if ( $p->next_tag() ) { $p->set_attribute( 'data-wc-navigation-disabled', 'true' ); } $content = $p->get_updated_html(); $dirty_enhanced_queries[ $block['attrs']['queryId'] ] = null; } array_pop( $enhanced_query_stack ); if ( empty( $enhanced_query_stack ) ) { remove_filter( 'render_block_woocommerce/product-collection', $render_product_collection_callback ); $render_product_collection_callback = null; } return $content; }; add_filter( 'render_block_woocommerce/product-collection', $render_product_collection_callback, 10, 2 ); } } elseif ( ! empty( $enhanced_query_stack ) && isset( $block_name ) && ! $this->is_block_compatible( $block_name ) ) { foreach ( $enhanced_query_stack as $query_id ) { $dirty_enhanced_queries[ $query_id ] = true; } } return $parsed_block; }