Inbox Preview Text for HTML Emails
Adds hidden preview text to HTML emails, the short line mail apps show next to the subject, taken from the first sentence of the message so inboxes no longer show stray template text.
Opens WPIDE on
Code
add_filter( 'wp_mail', function ( $atts ) {
$message = (string) $atts['message'];
if ( ! preg_match( '/<body[^>]*>/i', $message, $body, PREG_OFFSET_CAPTURE ) || false !== stripos( $message, 'preheader' ) ) {
return $atts;
}
$text = trim( preg_replace( '/\s+/', ' ', wp_strip_all_tags( substr( $message, $body[0][1] ) ) ) );
if ( '' === $text ) {
return $atts;
}
$first = preg_split( '/(?<=[.!?])\s/', $text, 2 );
$hint = wp_html_excerpt( $first[0], 110, '…' );
$span = '<div class="preheader" style="display:none!important;visibility:hidden;opacity:0;color:transparent;height:0;width:0;max-height:0;max-width:0;overflow:hidden;mso-hide:all;">' . esc_html( $hint ) . str_repeat( '͏ ', 30 ) . '</div>';
$insert = $body[0][1] + strlen( $body[0][0] );
$atts['message'] = substr( $message, 0, $insert ) . $span . substr( $message, $insert );
return $atts;
}, 60 );
Notes
Only HTML emails with a body tag are changed, and only when they do not already contain preview text.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.