Зробіть щось після надсилання електронного листа


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гачок.


Дякую вам взагалі. Щойно я зробив цей плагін і його доступний із каталогу плагінів Wordpress
Ameer Mousavi

1
Вас вітають і вітають з новим плагіном @AmirMousavi
birgire

Виникає конфлікт із плагіном Контактної форми 7. Він не може отримати результат надсилання. Його навантажувач Ajax крутився назавжди; навіть при успішному надсиланні електронної пошти.
Амеєр Мусаві

2
Я перевірив цей метод на CF7, і він працював як слід. Якщо ajaxloader спрацьовує назавжди, це може вказувати на непов’язані помилки javascript / PHP / сервера, і тому wp_mail()ніколи не може викликатися в CF7. Зауважте, що додатки сторонніх розробників тут поза темою на WPSE. @AmirMousavi
birgire
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.