Skip to content

Commit

Permalink
Filter callout block render and render a notice block
Browse files Browse the repository at this point in the history
  • Loading branch information
adamwoodnz committed Oct 20, 2024
1 parent 3269f6d commit 1c86f57
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions mu-plugins/blocks/notice/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
// Run after `WPorg_Handbook_Callout_Boxes` registers the shortcodes.
add_action( 'init', __NAMESPACE__ . '\init', 11 );

add_filter( 'pre_render_block', __NAMESPACE__ . '\render_callout_block_as_notice', 11, 2 );

/**
* Registers the block using the metadata loaded from the `block.json` file.
* Behind the scenes, it registers also all assets so they can be enqueued
Expand Down Expand Up @@ -70,3 +72,28 @@ function render_shortcode( $attr, $content, $tag ) {

return $final_markup;
}

/**
* Renders a callout block as a notice.
*
* @param string|null $pre_render The pre-rendered content or null.
* @param array $parsed_block The parsed block array.
* @return string|null The rendered notice or the original pre-render value.
*/
function render_callout_block_as_notice( $pre_render, $parsed_block ) {
if ( is_admin() || 'wporg/callout' !== $parsed_block['blockName'] ) {
return $pre_render;
}

$callout_wrapper = $parsed_block['innerHTML'];
// Extract the specific "callout-*" class and remove the "callout-" prefix
preg_match( '/\bcallout-([\w-]+)\b/', $callout_wrapper, $matches );
$tag = $matches[1] ?? 'info';

$content = '';
foreach ( $parsed_block['innerBlocks'] as $inner_block ) {
$content .= render_block( $inner_block );
}

return render_shortcode( null, $content, $tag );
}

0 comments on commit 1c86f57

Please sign in to comment.