Automattic\WooCommerce\Internal\EmailEditor

BlockEmailRenderer::render_block_emailprivateWC 1.0

Maybe render block-based email content.

Method of the class: BlockEmailRenderer{}

No Hooks.

Returns

String. Modified email content

Usage

// private - for code of main (parent) class only
$result = $this->render_block_email( $email_post, $woo_content, $wc_email ): ?string;
$email_post(WP_Post) (required)
Email post.
$woo_content(string) (required)
WooCommerce email content.
$wc_email(WC_Email) (required)
WooCommerce email.

BlockEmailRenderer::render_block_email() code WC 10.8.1

private function render_block_email( \WP_Post $email_post, string $woo_content, \WC_Email $wc_email ): ?string {
	try {
		// Set email context before rendering so blocks can access it.
		$filter_callback = function ( $context = array() ) use ( $wc_email ) {
			return array_merge( $context, $this->build_email_context( $wc_email ) );
		};
		add_filter( 'woocommerce_email_editor_rendering_email_context', $filter_callback, 10, 1 );

		$subject             = $wc_email->get_subject(); // We will get subject from $email_post after we add it to the editor.
		$preheader           = $wc_email->get_preheader();
		$rendered_email_data = $this->renderer->render( $email_post, $subject, $preheader, 'en' );
		$personalized_email  = $this->personalizer->personalize_content( $rendered_email_data['html'] );
		$rendered_email      = str_replace( self::WOO_EMAIL_CONTENT_PLACEHOLDER, $woo_content, $personalized_email );

		// Remove the filter after rendering to prevent context leakage.
		remove_filter( 'woocommerce_email_editor_rendering_email_context', $filter_callback );

		add_filter( 'woocommerce_email_styles', array( $this->woo_content_processor, 'prepare_css' ), 10, 2 );
		return $rendered_email;
	} catch ( \Exception $e ) {
		wc_caught_exception( $e, __METHOD__, array( $email_post, $woo_content, $wc_email ) );
		// Remove the filter in case of exception.
		if ( isset( $filter_callback ) ) {
			remove_filter( 'woocommerce_email_editor_rendering_email_context', $filter_callback );
		}
		return null;
	}
}