Automattic\WooCommerce\EmailEditor\Integrations\Core\Renderer\Blocks

Embed::render_link_embed_cardprivateWC 1.0

Render a link embed as a rich card using data from the WordPress embed page.

Method of the class: Embed{}

No Hooks.

Returns

String. Rendered card HTML or empty string if embed page data is insufficient.

Usage

// private - for code of main (parent) class only
$result = $this->render_link_embed_card( $url, $parsed_block, $rendering_context ): string;
$url(string) (required)
URL to render as a card.
$parsed_block(array) (required)
Parsed block.
$rendering_context(Rendering_Context) (required)
Rendering context.

Embed::render_link_embed_card() code WC 10.8.1

private function render_link_embed_card( string $url, array $parsed_block, Rendering_Context $rendering_context ): string {
	$embed_data = $this->fetch_embed_page_data( $url );

	if ( empty( $embed_data['title'] ) ) {
		return '';
	}

	$title         = $embed_data['title'];
	$thumbnail_url = $embed_data['thumbnail_url'];
	$provider_name = ! empty( $embed_data['provider_name'] )
		? $embed_data['provider_name']
		: (string) wp_parse_url( $url, PHP_URL_HOST );
	$provider_url  = $embed_data['provider_url'];
	$excerpt       = $embed_data['excerpt'];
	$site_icon_url = $embed_data['site_icon_url'];

	$email_styles = $rendering_context->get_theme_styles();
	$text_color   = $email_styles['color']['text'] ?? '#1e1e1e';
	$text_color   = Html_Processing_Helper::sanitize_color( $text_color );
	$link_color   = $email_styles['elements']['link']['color']['text'] ?? '#0073aa';
	$link_color   = Html_Processing_Helper::sanitize_color( $link_color );

	// Build card rows.
	$rows_html = '';

	// Optional thumbnail row.
	if ( ! empty( $thumbnail_url ) ) {
		$thumbnail_cell = Table_Wrapper_Helper::render_table_cell(
			sprintf(
				'<a href="%s" target="_blank" rel="noopener nofollow"><img src="%s" alt="%s" style="display: block; width: 100%%; border-radius: 4px 4px 0 0;" /></a>',
				esc_url( $url ),
				esc_url( $thumbnail_url ),
				esc_attr( $title )
			),
			array( 'style' => 'padding: 0;' )
		);
		$rows_html     .= '<tr>' . $thumbnail_cell . '</tr>';
	}

	// Build content: title, optional excerpt, provider.
	$content_parts = sprintf(
		'<a href="%s" target="_blank" rel="noopener nofollow" style="color: %s; text-decoration: none; font-weight: bold;">%s</a>',
		esc_url( $url ),
		esc_attr( $text_color ),
		esc_html( $title )
	);

	if ( ! empty( $excerpt ) ) {
		$content_parts .= sprintf(
			'<br /><span style="font-size: 14px; color: %s; line-height: 1.4;">%s</span>',
			esc_attr( $text_color ),
			esc_html( $excerpt )
		);
		$content_parts .= sprintf(
			' <a href="%s" target="_blank" rel="noopener nofollow" style="font-size: 14px; color: %s; text-decoration: underline;">%s</a>',
			esc_url( $url ),
			esc_attr( $link_color ),
			esc_html__( 'Continue reading', 'woocommerce' )
		);
	}

	// Provider row with optional site icon.
	$provider_text = ! empty( $provider_url )
		? sprintf(
			'<a href="%s" target="_blank" rel="noopener nofollow" style="font-size: 13px; color: %s; text-decoration: none;">%s</a>',
			esc_url( $provider_url ),
			esc_attr( $text_color ),
			esc_html( $provider_name )
		)
		: sprintf(
			'<span style="font-size: 13px; color: %s;">%s</span>',
			esc_attr( $text_color ),
			esc_html( $provider_name )
		);

	if ( ! empty( $site_icon_url ) ) {
		$content_parts .= sprintf(
			'<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="margin-top: 16px;">'
			. '<tr>'
			. '<td style="vertical-align: middle; padding-right: 6px;">'
			. '<img src="%s" width="16" height="16" alt="" style="display: block; border-radius: 2px;" />'
			. '</td>'
			. '<td style="vertical-align: middle;">%s</td>'
			. '</tr></table>',
			esc_url( $site_icon_url ),
			$provider_text
		);
	} else {
		$content_parts .= '<br />' . $provider_text;
	}

	$content_cell = Table_Wrapper_Helper::render_table_cell(
		$content_parts,
		array( 'style' => 'padding: 12px;' )
	);
	$rows_html   .= '<tr>' . $content_cell . '</tr>';

	$card_html  = sprintf(
		'<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: 1px solid #ddd; border-radius: 4px; width: 100%%;">'
	);
	$card_html .= '<tbody>' . $rows_html . '</tbody></table>';

	$outlook_wrapped = Table_Wrapper_Helper::render_outlook_table_wrapper(
		$card_html,
		array(
			'align' => 'left',
			'width' => '100%',
		)
	);

	return $this->add_spacer(
		$outlook_wrapped,
		$parsed_block['email_attrs'] ?? array()
	);
}