Automattic\WooCommerce\EmailEditor\Integrations\Core\Renderer\Blocks
Embed::render_link_embed_card │ private │ WC 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() 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()
);
}