web-dev-qa-db-fra.com

Comment utiliser les paramètres SMTP 'phpmailer_init' uniquement sur certaines actions 'wp_mail'?

Existe-t-il une vérification conditionnelle que je peux exécuter pour phpmailer_init ou un paramètre wp_mail qui me permet d'appliquer mes paramètres SMTP phpmailer_init personnalisés uniquement à des actions wp_mail spécifiques ou est-ce que phpmailer_init est toujours exécuté à l'échelle du site?

1
tomyam

phpmailer_init sera toujours déclenché pour chaque appel wp_mail() - cependant, vous pouvez le raccrocher/le décrocher de manière conditionnelle comme ceci:

function wpse_224496_phpmailer_init( $phpmailer ) {
    // SMTP setup

    // Always remove self at the end
    remove_action( 'phpmailer_init', __function__ );
}

function wpse_224496_wp_mail( $mail ) {
    // Example: only SMTP for emails addressed to [email protected]
    if ( $mail['to'] === '[email protected]' )
        add_action( 'phpmailer_init', 'wpse_224496_phpmailer_init' );

    // Example: only SMTP for subject "Foo"
    if ( $mail['subject'] === 'Foo' )
        add_action( 'phpmailer_init', 'wpse_224496_phpmailer_init' );

    // Other properties
    $mail['message'];
    $mail['headers']; // Could be string or array
    $mail['attachments']; // Could be string or array

    return $mail;
}

add_filter( 'wp_mail', 'wpse_224496_wp_mail' );
3
TheDeadMedic