$parsers Contain all parsers. */ private array $parsers = array(); private function __construct() { $this->set_parsers(); } private function set_parsers() { $this->parsers = apply_filters( 'ablocks/register_image_parsers', array( 'core/group' => GroupParser::class, 'core/image' => CoreImageParser::class, 'ablocks/image' => ImageParser::class, 'ablocks/image-comparison' => ImageComparisonParser::class, 'ablocks/video' => VideoParser::class, 'ablocks/tabs' => TabsParser::class, 'ablocks/image-scroll' => ImageScrollParser::class, 'ablocks/modal' => ModalParser::class, 'ablocks/flip-box' => FlipBoxParser::class, 'ablocks/image-hotspot' => ImageHotspotParser::class, ) ); } public static function instance() { static $instance = false; if ( ! $instance ) { $instance = new self(); } return $instance; } public function parse( array $blocks ): array { $parsed_blocks = array(); foreach ( $blocks as $block ) { if ( count( $block['innerBlocks'] ) > 0 ) { $block['innerBlocks'] = $this->parse( $block['innerBlocks'] ); } $parsed_blocks[] = $this->process( $block ); } return $parsed_blocks; } private function process( array $block ): array { $block = ( new CommonParser( $block ) )->do_parse(); if ( ! array_key_exists( $block['blockName'], $this->parsers ) ) { return $block; } /** @var AbstractImageParser $parser */ $parser = new $this->parsers[ $block['blockName'] ]( $block ); return $parser->do_parse(); } }