Automattic\WooCommerce\Blocks\Templates
SingleProductTemplate::process_block_for_password_form
Replace or remove a parsed block when rendering a password-protected product.
Метод класса: SingleProductTemplate{}
Хуков нет.
Возвращает
array{blocks: array, is_already_replaced: bool}. Replacement blocks (empty when removed).
Использование
$result = SingleProductTemplate::process_block_for_password_form( $block, $is_already_replaced );
- $block(массив) (обязательный)
- Parsed block.
- $is_already_replaced(true|false) (обязательный)
- If the password form has already been added.
Код SingleProductTemplate::process_block_for_password_form() SingleProductTemplate::process block for password form WC 11.2.2
private static function process_block_for_password_form( $block, $is_already_replaced ) {
if ( self::is_password_protected_replacement_block( $block ) ) {
if ( $is_already_replaced ) {
return array(
'blocks' => array(),
'is_already_replaced' => true,
);
}
return array(
'blocks' => array( parse_blocks( '<!-- wp:html -->' . get_the_password_form() . '<!-- /wp:html -->' )[0] ),
'is_already_replaced' => true,
);
}
if ( empty( $block['innerBlocks'] ) || ! isset( $block['innerContent'] ) || ! is_array( $block['innerContent'] ) ) {
return array(
'blocks' => array( $block ),
'is_already_replaced' => $is_already_replaced,
);
}
$new_inner_blocks = array();
$new_inner_content = array();
$inner_block_index = 0;
foreach ( $block['innerContent'] as $chunk ) {
if ( is_string( $chunk ) ) {
$new_inner_content[] = $chunk;
continue;
}
if ( ! isset( $block['innerBlocks'][ $inner_block_index ] ) ) {
continue;
}
$processed = self::process_block_for_password_form( $block['innerBlocks'][ $inner_block_index ], $is_already_replaced );
$is_already_replaced = $processed['is_already_replaced'];
++$inner_block_index;
foreach ( $processed['blocks'] as $processed_block ) {
$new_inner_blocks[] = $processed_block;
$new_inner_content[] = null;
}
}
if ( count( $new_inner_blocks ) === 0 ) {
return array(
'blocks' => array(),
'is_already_replaced' => $is_already_replaced,
);
}
$block['innerBlocks'] = $new_inner_blocks;
$block['innerContent'] = $new_inner_content;
return array(
'blocks' => array( $block ),
'is_already_replaced' => $is_already_replaced,
);
}