Сделайте что-нибудь после отправки письма

11

Я хочу сделать что-то после того, как WordPress отправил электронное письмо. Например, после отправки сообщения «Сброс пароля» с помощью wp_mail()функции.

Амир Мусави
источник

Ответы:

14

Использование класса PHPMailer с обратным вызовом действия:

Я покопался в PHPMailerклассе и обнаружил, что он поддерживает настраиваемые действия .

Вот как обратный вызов активируется с помощью doCallback()метода в классе.

Также есть PHPMailer тест на GitHub, использующий эту функцию через callbackAction()обратный вызов.

Мы можем настроить его в WordPress с помощью:

$phpmailer->action_function = 'wpse_mail_action';

где wpse_mail_action()обратный вызов действия.

Вот пример, как мы можем применить это:

/**
 * Custom PHPMailer action callback
 */
function wpse_mail_action( $is_sent, $to, $cc, $bcc, $subject, $body, $from )
{
    do_action( 'wpse_mail_action', $is_sent, $to, $cc, $bcc, $subject, $body, $from );
    return $is_sent; // don't actually need this return!
}

/**
 * Setup a custom PHPMailer action callback
 */
add_action( 'phpmailer_init', function( $phpmailer )
{
    $phpmailer->action_function = 'wpse_mail_action';
} );

Теперь у нас есть доступ к wpse_mail_actionкрючку.

Затем мы можем добавить собственный почтовый регистратор и проверить, были ли письма успешно отправлены или нет.

Пример:

Вот (непроверенный) пример того, как мы могли бы что-то сделать после отправки сообщений «Сброс пароля»:

/**
 * Do something after the "Password Reset" post has been successfully sent:
 */
add_action( 'wpse_mail_action', function( $is_sent, $to, $cc, $bcc, $subject, $body, $from )
{
    if( $is_sent && false !== stripos( $subject, 'Password Reset' ) )
        // do stuff

}, 10, 7 );

где мы могли бы добавить некоторые дополнительные ограничения и включить в другие действия при необходимости, например, retrieve_passwordловушку.

birgire
источник
Спасибо за все. Я только что сделал плагин и теперь он доступен из каталога плагинов WordPress
Амир Мусави,
1
Добро пожаловать и поздравляем с новым плагином @AmirMousavi
birgire
Существует конфликт с плагином Contact Form 7. Не может получить результат отправки. Его загрузчик Ajax вращался вечно; даже если письмо успешно отправлено.
Амир Мусави
2
Я проверил этот метод с CF7, и он работал как ожидалось. Если ajaxloader вращается вечно, это может указывать на несвязанные ошибки javascript / PHP / Server и, следовательно, wp_mail()никогда не может быть вызвано в CF7. Обратите внимание, что сторонние плагины не по теме здесь, на WPSE. @AmirMousavi
birgire,