Automattic\WooCommerce\Internal\EmailEditor

BlockEmailRenderer::render_block_email │ private │ WC 1.0

Render block email content from the saved post or the file template markup.

Method of the class: BlockEmailRenderer{}

No Hooks.

Returns

string|null. Rendered email content, or null when rendering fails.

Usage

// private - for code of main (parent) class only
$result = $this->render_block_email( ?\WP_Post $email_post, $file_template_content, $woo_content, $wc_email ): ?string;
?\WP_Post $email_post(required)
.
$file_template_content(string) (required)
File template block markup, used when no post is given.
$woo_content(string) (required)
WooCommerce email content.
$wc_email(WC_Email) (required)
WooCommerce email.

BlockEmailRenderer::render_block_email() code WC 11.1.2

private function render_block_email( ?\WP_Post $email_post, string $file_template_content, 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();
		$preheader = $wc_email->get_preheader();

		if ( $email_post ) {
			$rendered_email_data = $this->renderer->render( $email_post, $subject, $preheader, 'en' );
		} else {
			$rendered_email_data = $this->renderer->render_from_content( $file_template_content, ( new WooEmailTemplate() )->get_slug(), $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 ( \Throwable $e ) {
		// Catching \Throwable on purpose: this is the last safety net
		// before sending, and an \Error (e.g. a TypeError from an
		// unresolvable template) must also fall back to the classic
		// pipeline instead of fataling the request that triggered the email.
		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;
	}
}