Вопрос или проблема
Я могу в данный момент отфильтровать тип содержимого функции wp_mail:
add_filter( 'wp_mail_content_type', function( $content_type ) {
return 'text/html';
});
И я могу отфильтровать содержание сообщения
add_filter( 'wp_mail', function( $args ) {
$args['message'] = 'Отфильтрованный текст здесь';
return $args;
});
Но как мне сделать это только условно?
Я хочу фильтровать сообщение только тогда, когда тип содержимого
== text/plain
.
Я предполагаю, что существует очень простое решение этой задачи, но я пока его не нашёл.
Учтите, что фильтр wp_mail
работает перед фильтром wp_mail_content_type
.
Если вы используете PHP Mailer, то можете попробовать (не тестировалось):
add_action( 'phpmailer_init', function( $phpmailer ) {
if( 'text/plain' === $phpmailer->ContentType ) {
$phpmailer->Body = 'Отфильтрованный текст здесь'; // <-- Замена сообщения
}
});
Ответ или решение
Чтобы условно отфильтровать содержимое сообщения в функции wp_mail
в зависимости от типа контента, вы можете использовать хук phpmailer_init
. Хук phpmailer_init
вызывается перед отправкой письма и позволяет вам изменять параметры отправки, в том числе тип содержимого и тело сообщения. Вот как это можно осуществить:
add_action( 'phpmailer_init', function( $phpmailer ) {
// Проверяем, если тип содержимого равен 'text/plain'
if ( 'text/plain' === $phpmailer->ContentType ) {
// Устанавливаем тело сообщения
$phpmailer->Body = 'Отфильтрованный текст здесь'; // <- Переопределяем сообщение
}
});
Этот код добавляет действие, которое проверяет тип контента. Если он равен text/plain
, то тело сообщения будет изменено на заданный текст.
Также важно понимать, что фильтр wp_mail
выполняется до фильтра wp_mail_content_type
, и, следовательно, изменение происходит непосредственно в объекте PHPMailer.
Если вам нужно также установить тип содержимого для всех исходящих писем, вы можете добавить что-то вроде следующего:
add_filter( 'wp_mail_content_type', function( $content_type ) {
return 'text/plain'; // или 'text/html', в зависимости от вашего случая
});
Таким образом, комбинация этих двух подходов позволит вам гибко управлять отправкой электронных писем в WordPress в зависимости от ваших нужд. Убедитесь, что вы правильно настроили и протестировали сообщения, чтобы избежать неожиданных результатов при отправке писем.