Automattic\WooCommerce\Blocks\BlockTypes

ProductFilterStatus::renderprotectedWC 1.0

Include and render the block.

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

Хуков нет.

Возвращает

Строку. Rendered block type output.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->render( $attributes, $content, $block );
$attributes(массив) (обязательный)
Block attributes.
По умолчанию: empty array
$content(строка) (обязательный)
Block content.
По умолчанию: empty string
$block(WP_Block) (обязательный)
Block instance.

Код ProductFilterStatus::render() WC 9.9.4

protected function render( $attributes, $content, $block ) {
	// don't render if its admin, or ajax in progress.
	if ( is_admin() || wp_doing_ajax() ) {
		return '';
	}

	$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 ) {
			return array(
				'label'     => $stock_statuses[ $item['status'] ],
				'ariaLabel' => $stock_statuses[ $item['status'] ],
				'value'     => $item['status'],
				'selected'  => in_array( $item['status'], $selected_stock_statuses, true ),
				'count'     => $item['count'],
				'type'      => 'status',
			);
		},
		$stock_status_data
	);

	$filter_context = array(
		'items'      => array_values( $filter_options ),
		'showCounts' => $attributes['showCounts'] ?? false,
	);

	$wrapper_attributes = array(
		'data-wp-interactive' => 'woocommerce/product-filters',
		'data-wp-key'         => wp_unique_prefixed_id( $this->get_full_block_name() ),
		'data-wp-context'     => wp_json_encode(
			array(
				/* translators: {{label}} is the status filter item label. */
				'activeLabelTemplate' => __( 'Status: {{label}}', 'woocommerce' ),
				'filterType'          => 'status',
			),
			JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
		),
	);

	if ( empty( $filter_options ) ) {
		$wrapper_attributes['hidden'] = true;
		$wrapper_attributes['class']  = 'wc-block-product-filter--hidden';
	}

	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 ) ) )->render();
				return $carry;
			},
			''
		)
	);
}