Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

Renderer::add_navigation_link_directivespublicWC 1.0

Add interactive links to all anchors inside the Query Pagination block. This enabled client-side navigation for the product collection block.

Метод класса: Renderer{}

Хуков нет.

Возвращает

null. Ничего (null).

Использование

$Renderer = new Renderer();
$Renderer->add_navigation_link_directives( $block_content, $block, $instance );
$block_content(строка) (обязательный)
The block content.
$block(массив) (обязательный)
The full block, including name and attributes.
$instance(WP_Block) (обязательный)
The block instance.

Код Renderer::add_navigation_link_directives() WC 9.9.4

public function add_navigation_link_directives( $block_content, $block, $instance ) {
	$query_context                  = $instance->context['query'] ?? array();
	$is_product_collection_block    = $query_context['isProductCollectionBlock'] ?? false;
	$query_id                       = $instance->context['queryId'] ?? null;
	$parsed_query_id                = $this->parsed_block['attrs']['queryId'] ?? null;
	$is_enhanced_pagination_enabled = ! ( $this->parsed_block['attrs']['forcePageReload'] ?? false );

	// Only proceed if the block is a product collection block,
	// enhanced pagination is enabled and query IDs match.
	if ( $is_product_collection_block && $is_enhanced_pagination_enabled && $query_id === $parsed_query_id ) {
		$p = new \WP_HTML_Tag_Processor( $block_content );
		$p->next_tag( array( 'class_name' => 'wp-block-query-pagination' ) );

		while ( $p->next_tag( 'A' ) ) {
			if ( $p->has_class( 'wp-block-query-pagination-next' ) || $p->has_class( 'wp-block-query-pagination-previous' ) ) {
				$p->set_attribute( 'data-wp-on--click', 'woocommerce/product-collection::actions.navigate' );
				$p->set_attribute(
					'data-wp-key',
					$p->has_class( 'wp-block-query-pagination-next' )
						? 'product-collection-pagination--next'
						: 'product-collection-pagination--previous'
				);
				$p->set_attribute( 'data-wp-watch', 'woocommerce/product-collection::callbacks.prefetch' );
				$p->set_attribute( 'data-wp-on--mouseenter', 'woocommerce/product-collection::actions.prefetchOnHover' );
			} elseif ( $p->has_class( 'page-numbers' ) ) {
				$p->set_attribute( 'data-wp-on--click', 'woocommerce/product-collection::actions.navigate' );
				$p->set_attribute( 'data-wp-key', 'product-collection-pagination-numbers--' . $p->get_attribute( 'aria-label' ) );
			}
		}

		return $p->get_updated_html();
	}

	return $block_content;
}