Automattic\WooCommerce\Blocks\BlockTypes

ProductDetails::inject_compatible_tabsprivateWC 1.0

Inject compatible tabs.

Method of the class: ProductDetails{}

Hooks from the method

Returns

Array. Parsed block.

Usage

// private - for code of main (parent) class only
$result = $this->inject_compatible_tabs( $parsed_block );
$parsed_block(array) (required)
Parsed block.

ProductDetails::inject_compatible_tabs() code WC 10.7.0

private function inject_compatible_tabs( $parsed_block ) {
	if ( ! $this->has_accordion( $parsed_block ) ) {
		return $parsed_block;
	}

	/**
	 * Filter the product tabs in the product details block.
	 *
	 * @since 3.3.0
	 * @param array $tabs Array of product tabs.
	 */
	$product_tabs = apply_filters(
		'woocommerce_product_tabs',
		array()
	);

	$default_tabs_callbacks = array(
		'woocommerce_product_description_tab',
		'woocommerce_product_additional_information_tab',
		'comments_template',
	);

	$product_tabs = array_filter(
		$product_tabs,
		function ( $tab ) use ( $default_tabs_callbacks ) {
			return ! in_array( $tab['callback'], $default_tabs_callbacks, true );
		}
	);

	usort(
		$product_tabs,
		function ( $a, $b ) {
			return $a['priority'] <=> $b['priority'];
		}
	);

	$accordion_blocks = array();

	$accordion_anchor_block = $this->get_accordion_anchor_block( $parsed_block );

	if ( ! $accordion_anchor_block ) {
		return $parsed_block;
	}

	foreach ( $product_tabs as $key => $tab ) {
		ob_start();
		call_user_func( $tab['callback'], $key, $tab );
		$tab_content        = ob_get_clean();
		$accordion_blocks[] = $this->create_accordion_item_block(
			$tab['title'],
			'<!-- wp:html -->' . $tab_content . '<!-- /wp:html -->',
			$accordion_anchor_block
		);
	}

	return $this->inject_parsed_accordion_blocks( $parsed_block, $accordion_blocks );
}