Automattic\WooCommerce\Blocks\BlockTypes

ProductFilterStatus::render()protectedWC 1.0

Include and render the block.

Method of the class: ProductFilterStatus{}

No Hooks.

Return

String. Rendered block type output.

Usage

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

ProductFilterStatus::render() code WC 9.6.0

protected function render( $attributes, $content, $block ) {

	$stock_status_data       = $this->get_stock_status_counts( $block );
	$stock_statuses          = wc_get_product_stock_status_options();
	$filter_params           = $block->context['filterParams'] ?? array();
	$query                   = $filter_params[ self::STOCK_STATUS_QUERY_VAR ] ?? '';
	$selected_stock_statuses = array_filter( explode( ',', $query ) );

	$filter_options = array_map(
		function ( $item ) use ( $stock_statuses, $selected_stock_statuses, $attributes ) {
			$label = $stock_statuses[ $item['status'] ] . ( $attributes['showCounts'] ? ' (' . $item['count'] . ')' : '' );
			return array(
				'label'    => $label,
				'value'    => $item['status'],
				'selected' => in_array( $item['status'], $selected_stock_statuses, true ),
				'rawData'  => $item,
			);
		},
		$stock_status_data
	);

	$filter_context = array(
		'filterData'         => array(
			'items'   => $filter_options,
			'actions' => array(
				'toggleFilter' => "{$this->get_full_block_name()}::actions.toggleFilter",
			),
		),
		'hasSelectedFilters' => ! empty( $selected_stock_statuses ),
	);

	$wrapper_attributes = array(
		'data-wc-interactive'  => wp_json_encode( array( 'namespace' => $this->get_full_block_name() ), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ),
		'data-wc-context'      => wp_json_encode(
			array(
				'hasSelectedFilters' => $filter_context['hasSelectedFilters'],
				'hasFilterOptions'   => ! empty( $filter_options ),
			),
			JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
		),
		'data-wc-bind--hidden' => '!context.hasFilterOptions',
	);

	if ( empty( $filter_options ) ) {
		$wrapper_attributes['hidden'] = true;
	}

	return sprintf(
		'<div %1$s>%2$s</div>',
		get_block_wrapper_attributes(
			$wrapper_attributes
		),
		array_reduce(
			$block->parsed_block['innerBlocks'],
			function ( $carry, $parsed_block ) use ( $filter_context ) {
				$carry .= ( new \WP_Block( $parsed_block, array( 'filterData' => $filter_context['filterData'] ) ) )->render();
				return $carry;
			},
			''
		)
	);
}