Я хочу сделать что-то после того, как WordPress отправил электронное письмо. Например, после отправки сообщения «Сброс пароля» с помощью wp_mail()
функции.
Я покопался в 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
ловушку.
wp_mail()
никогда не может быть вызвано в CF7. Обратите внимание, что сторонние плагины не по теме здесь, на WPSE. @AmirMousavi