Фильтрация wp_mail на основе типа контента

Вопрос или проблема

Я могу в данный момент отфильтровать тип содержимого функции 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 в зависимости от ваших нужд. Убедитесь, что вы правильно настроили и протестировали сообщения, чтобы избежать неожиданных результатов при отправке писем.

Оцените материал
Добавить комментарий

Капча загружается...