Làm gì đó sau khi gửi email


11

Tôi muốn làm một cái gì đó sau khi WordPress gửi email. Ví dụ: sau khi gửi email "Đặt lại mật khẩu" bằng wp_mail()chức năng.

Câu trả lời:


14

Sử dụng lớp PHPMailer với một cuộc gọi lại hành động:

Tôi đã đào sâu vào PHPMailerlớp và thấy rằng nó hỗ trợ một hành động tùy chỉnh .

Đây là cách gọi lại được kích hoạt với doCallback()phương thức trong lớp.

Ngoài ra còn có một PHPMailer thử nghiệm trên GitHub bằng tính năng này thông qua cuộc callbackAction()gọi lại.

Chúng tôi có thể thiết lập nó trong WordPress với:

$phpmailer->action_function = 'wpse_mail_action';

nơi wpse_mail_action()là gọi lại hành động.

Đây là một ví dụ về cách chúng ta có thể áp dụng điều này:

/**
 * 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';
} );

Bây giờ chúng tôi có quyền truy cập vào wpse_mail_actionhook.

Sau đó chúng tôi có thể thêm trình ghi nhật ký thư của riêng mình và kiểm tra xem thư có được gửi thành công hay không.

Thí dụ:

Đây là một ví dụ (chưa được kiểm tra) làm thế nào chúng ta có thể làm gì đó sau khi bài viết "Đặt lại mật khẩu" được gửi:

/**
 * 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 );

nơi chúng ta có thể thêm một số hạn chế hơn nữa và gói gọn vào các hành động khác nếu không cần thiết, như retrieve_passwordhook.


Cảm ơn bạn tất cả. Tôi vừa mới tạo plugin và giờ đây có thể truy cập được từ thư mục plugin wordpress
Ameer Mousavi

1
Bạn được chào đón và chúc mừng với plugin mới @AmirMousavi
birgire

Có mâu thuẫn với plugin Contact Form 7. Nó không thể nhận được kết quả của việc gửi. Trình tải Ajax của nó đã quay vòng mãi mãi; ngay cả khi email được gửi thành công.
Ameer Mousavi

2
Tôi đã thử nghiệm phương pháp này với CF7 và nó hoạt động như mong đợi. Nếu ajaxloader quay mãi mãi, nó có thể chỉ ra các lỗi javascript / PHP / Server không liên quan và do đó wp_mail()có thể không bao giờ được gọi trong CF7. Lưu ý rằng các plugin của bên thứ 3 không có chủ đề ở đây trên WPSE. @AmirMousavi
bạch dương
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.