Emoji: When we're replacing emoji with `<img>`s in email, we can only do that if the Content-Type is text/html - otherwise, they'll show up in the email as the HTML string.
Fixes #31720 Built from https://develop.svn.wordpress.org/trunk@31860 git-svn-id: http://core.svn.wordpress.org/trunk@31839 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
31d731cfe4
commit
73b92df912
|
@ -4244,8 +4244,60 @@ function wp_staticize_emoji( $text ) {
|
|||
* @return array The email data array, with emoji in the message staticized.
|
||||
*/
|
||||
function _wp_staticize_emoji_for_email( $mail ) {
|
||||
if ( isset( $mail['message'] ) ) {
|
||||
if ( ! isset( $mail['message'] ) ) {
|
||||
return $mail;
|
||||
}
|
||||
|
||||
/*
|
||||
* We can only transform the emoji into images if it's a text/html email.
|
||||
* To do that, here's a cut down version of the same process that happens
|
||||
* in wp_mail() - get the Content-Type from the headers, if there is one,
|
||||
* then pass it through the wp_mail_content_type filter, in case a plugin
|
||||
* is handling changing the Content-Type.
|
||||
*/
|
||||
$headers = array();
|
||||
if ( isset( $mail['headers'] ) ) {
|
||||
if ( is_array( $mail['headers'] ) ) {
|
||||
$headers = $mail['headers'];
|
||||
} else {
|
||||
$headers = explode( "\n", str_replace( "\r\n", "\n", $mail['headers'] ) );
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $headers as $header ) {
|
||||
if ( strpos($header, ':') === false ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Explode them out
|
||||
list( $name, $content ) = explode( ':', trim( $header ), 2 );
|
||||
|
||||
// Cleanup crew
|
||||
$name = trim( $name );
|
||||
$content = trim( $content );
|
||||
|
||||
if ( 'content-type' === strtolower( $name ) ) {
|
||||
if ( strpos( $content, ';' ) !== false ) {
|
||||
list( $type, $charset ) = explode( ';', $content );
|
||||
$content_type = trim( $type );
|
||||
} else {
|
||||
$content_type = trim( $content );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Set Content-Type if we don't have a content-type from the input headers
|
||||
if ( ! isset( $content_type ) ) {
|
||||
$content_type = 'text/plain';
|
||||
}
|
||||
|
||||
/** This filter is documented in wp-includes/pluggable.php */
|
||||
$content_type = apply_filters( 'wp_mail_content_type', $content_type );
|
||||
|
||||
if ( 'text/html' === $content_type ) {
|
||||
$mail['message'] = wp_staticize_emoji( $mail['message'], true );
|
||||
}
|
||||
|
||||
return $mail;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue