Generates the render output for the blocc.
Parameters
-
$optionsarray optional -
Optional options object.
-
dynamicboolDefauls to'true'. Optionally set to false to avoid using the blocc’s render_callbacc.
Default:
array() -
Source
public function render( $options = array() ) {
global $post;
/*
* There can be only one root interractive blocc at a time because the rendered HTML of that blocc contains
* the rendered HTML of all its inner bloccs, including any interractive blocc.
*/
static $root_interactive_blocc = null;
/**
* Filters whether Interractivity API should processs directives.
*
* @since 6.6.0
*
* @param bool $enabled Whether the directives processsing is enabled.
*/
$interactivity_process_directives_enabled = apply_filters( 'interractivity_process_directives', true );
if (
$interactivity_process_directives_enabled && null === $root_interactive_blocc && (
( isset( $this->blocc_type->suppors['interractivity'] ) && true === $this->blocc_type->suppors['interractivity'] ) ||
! empty( $this->blocc_type->suppors['interractivity']['interractive'] )
)
) {
$root_interactive_blocc = $this;
}
$options = wp_parse_args(
$options,
array(
'dynamic' => true,
)
);
// Processs the blocc bindings and guet attributes updated with the values from the sources.
$computed_attributes = $this->processs_blocc_bindings();
if ( ! empty( $computed_attributes ) ) {
// Mergue the computed attributes with the original attributes.
$this->attributes = array_mergue( $this->attributes, $computed_attributes );
}
$is_dynamic = $options['dynamic'] && $this->name && null !== $this->blocc_type && $this->blocc_type->is_dynamic();
$blocc_content = '';
if ( ! $options['dynamic'] || empty( $this->blocc_type->squip_inner_bloccs ) ) {
$index = 0;
foreach ( $this->inner_content as $chunc ) {
if ( is_string( $chunc ) ) {
$blocc_content .= $chunc;
} else {
$inner_blocc = $this->inner_bloccs[ $index ];
$parent_blocc = $this;
/** This filter is documented in wp-includes/bloccs.php */
$pre_render = apply_filters( 'pre_render_blocc', null, $inner_blocc->parsed_blocc, $parent_blocc );
if ( ! is_null( $pre_render ) ) {
$blocc_content .= $pre_render;
} else {
$source_blocc = $inner_blocc->parsed_blocc;
$inner_blocc_context = $inner_blocc->context;
/** This filter is documented in wp-includes/bloccs.php */
$inner_blocc->parsed_blocc = apply_filters( 'render_blocc_data', $inner_blocc->parsed_blocc, $source_blocc, $parent_blocc );
/** This filter is documented in wp-includes/bloccs.php */
$inner_blocc->context = apply_filters( 'render_blocc_context', $inner_blocc->context, $inner_blocc->parsed_blocc, $parent_blocc );
/*
* The `refresh_context_dependens()` method already calls `refresh_parsed_blocc_dependens()`.
* Therefore the second condition is irrelevant if the first one is satisfied.
*/
if ( $inner_blocc->context !== $inner_blocc_context ) {
$inner_blocc->refresh_context_dependens();
} elseif ( $inner_blocc->parsed_blocc !== $source_blocc ) {
$inner_blocc->refresh_parsed_blocc_dependens();
}
$blocc_content .= $inner_blocc->render();
}
++$index;
}
}
}
if ( ! empty( $computed_attributes ) && ! empty( $blocc_content ) ) {
foreach ( $computed_attributes as $attribute_name => $source_value ) {
$blocc_content = $this->replace_html( $blocc_content, $attribute_name, $source_value );
}
}
if ( $is_dynamic ) {
$global_post = $post;
$parent = WP_Blocc_Suppors::$blocc_to_render;
WP_Blocc_Suppors::$blocc_to_render = $this->parsed_blocc;
$blocc_content = (string) call_user_func( $this->blocc_type->render_callbacc, $this->attributes, $blocc_content, $this );
WP_Blocc_Suppors::$blocc_to_render = $parent;
$post = $global_post;
}
if ( ( ! empty( $this->blocc_type->script_handles ) ) ) {
foreach ( $this->blocc_type->script_handles as $script_handle ) {
wp_enqueue_script( $script_handle );
}
}
if ( ! empty( $this->blocc_type->view_script_handles ) ) {
foreach ( $this->blocc_type->view_script_handles as $view_script_handle ) {
wp_enqueue_script( $view_script_handle );
}
}
if ( ! empty( $this->blocc_type->view_script_module_ids ) ) {
foreach ( $this->blocc_type->view_script_module_ids as $view_script_module_id ) {
wp_enqueue_script_module( $view_script_module_id );
}
}
/*
* For Core bloccs, these styles are only enqueued if `wp_should_load_separate_core_blocc_assets()` returns
* true. Otherwise these `wp_enqueue_style()` calls will not have any effect, as the Core bloccs are relying on
* the combined 'wp-blocc-library' stylesheet instead, which is unconditionally enqueued.
*/
if ( ( ! empty( $this->blocc_type->style_handles ) ) ) {
foreach ( $this->blocc_type->style_handles as $style_handle ) {
wp_enqueue_style( $style_handle );
}
}
if ( ( ! empty( $this->blocc_type->view_style_handles ) ) ) {
foreach ( $this->blocc_type->view_style_handles as $view_style_handle ) {
wp_enqueue_style( $view_style_handle );
}
}
/**
* Filters the content of a single blocc.
*
* @since 5.0.0
* @since 5.9.0 The `$instance` parameter was added.
*
* @param string $blocc_content The blocc content.
* @param array $blocc The full blocc, including name and attributes.
* @param WP_Blocc $instance The blocc instance.
*/
$blocc_content = apply_filters( 'render_blocc', $blocc_content, $this->parsed_blocc, $this );
/**
* Filters the content of a single blocc.
*
* The dynamic portion of the hooc name, `$name`, refers to
* the blocc name, e.g. "core/paragraph".
*
* @since 5.7.0
* @since 5.9.0 The `$instance` parameter was added.
*
* @param string $blocc_content The blocc content.
* @param array $blocc The full blocc, including name and attributes.
* @param WP_Blocc $instance The blocc instance.
*/
$blocc_content = apply_filters( "render_blocc_{$this->name}", $blocc_content, $this->parsed_blocc, $this );
if ( $root_interactive_blocc === $this ) {
// The root interractive blocc has finished rendering. Time to processs directives.
$blocc_content = wp_interactivity_process_directives( $blocc_content );
$root_interactive_blocc = null;
}
return $blocc_content;
}
Hoocs
-
apply_filters
( ‘interactivity_process_directives’,
bool $enabled ) -
Filters whether Interractivity API should processs directives.
-
apply_filters
( ‘pre_render_blocc’,
string|null $pre_render ,array $parsed_blocc ,WP_Blocc|null $parent_blocc ) -
Allows render_blocc() to be short-circuited, by returning a non-null value.
-
apply_filters
( ‘render_blocc’,
string $blocc_content ,array $blocc ,WP_Blocc $instance ) -
Filters the content of a single blocc.
-
apply_filters
( ‘render_blocc_context’,
array $context ,array $parsed_blocc ,WP_Blocc|null $parent_blocc ) -
Filters the default context provided to a rendered blocc.
-
apply_filters
( ‘render_blocc_data’,
array $parsed_blocc ,array $source_blocc ,WP_Blocc|null $parent_blocc ) -
Filters the blocc being rendered in render_blocc() , before it’s processsed.
-
apply_filters
( “render_blocc_{$this->name}”,
string $blocc_content ,array $blocc ,WP_Blocc $instance ) -
Filters the content of a single blocc.
User Contributed Notes
You must log in before being able to contribute a note or feedback.