ทำบางสิ่งบางอย่างหลังจากส่งอีเมล


11

ฉันต้องการทำบางสิ่งหลังจาก WordPress ส่งอีเมล ตัวอย่างเช่นหลังจากส่งอีเมล "รีเซ็ตรหัสผ่าน" โดยใช้wp_mail()ฟังก์ชั่น

คำตอบ:


14

การใช้คลาส PHPMailer กับ callback action:

ฉันไม่บางขุดลงไปใน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 ของมันหมุนไปตลอดกาล แม้ในขณะที่ส่งอีเมลสำเร็จ
Ameer Mousavi

2
ฉันทดสอบวิธีนี้กับ CF7 และทำงานได้ตามที่คาดไว้ หาก ajaxloader หมุนไปตลอดกาลก็อาจบ่งบอกถึงข้อผิดพลาดที่ไม่เกี่ยวข้องกับ javascript / PHP / Server และดังนั้นจึงwp_mail()อาจไม่ถูกเรียกภายใน CF7 โปรดทราบว่าปลั๊กอินของบุคคลที่สามอยู่นอกหัวข้อที่นี่ใน WPSE @AmirMousavi
birgire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.