Automattic\WooCommerce\Blocks\BlockTypes

ProductDetails::render_legacy_blockprotectedWC 1.0

Previously, the Product Details block was a standalone block. It doesn't have any inner blocks and it rendered the tabs directly like the classic template. When upgrading, we want the existing stores using the block to continue working as before, so we moved the logic the legacy render method here.

Method of the class: ProductDetails{}

No Hooks.

Returns

String. Rendered block output.

Usage

// protected - for code of main (parent) or child class
$result = $this->render_legacy_block( $attributes, $content, $block );
$attributes(array) (required)
Block attributes.
$content(string) (required)
Block content.
$block(WP_Block) (required)
Block instance.

Notes

ProductDetails::render_legacy_block() code WC 10.7.0

protected function render_legacy_block( $attributes, $content, $block ) {
	if ( ! is_singular( 'product' ) ) {
		return $content;
	}

	add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_legacy_assets' ], 20 );

	$hide_tab_title = isset( $attributes['hideTabTitle'] ) ? $attributes['hideTabTitle'] : false;

	if ( $hide_tab_title ) {
		add_filter( 'woocommerce_product_description_heading', '__return_empty_string' );
		add_filter( 'woocommerce_product_additional_information_heading', '__return_empty_string' );
		add_filter( 'woocommerce_reviews_title', '__return_empty_string' );
	}

	$tabs = $this->render_tabs();

	if ( $hide_tab_title ) {
		remove_filter( 'woocommerce_product_description_heading', '__return_empty_string' );
		remove_filter( 'woocommerce_product_additional_information_heading', '__return_empty_string' );
		remove_filter( 'woocommerce_reviews_title', '__return_empty_string' );

		// Remove the first `h2` of every `.wc-tab`. This is required for the Reviews tabs when there are no reviews and for plugin tabs.
		$tabs_html = new WP_HTML_Tag_Processor( $tabs );
		while ( $tabs_html->next_tag( array( 'class_name' => 'wc-tab' ) ) ) {
			if ( $tabs_html->next_tag( 'h2' ) ) {
				$tabs_html->set_attribute( 'hidden', 'true' );
			}
		}
		$tabs = $tabs_html->get_updated_html();
	}

	$classes_and_styles = StyleAttributesUtils::get_classes_and_styles_by_attributes( $attributes );

	return sprintf(
		'<div class="wp-block-woocommerce-product-details %1$s">
			<div style="%2$s">
				%3$s
			</div>
		</div>',
		esc_attr( $classes_and_styles['classes'] ),
		esc_attr( $classes_and_styles['styles'] ),
		$tabs
	);
}