¿Cómo detener la función de wp_mail?

Estoy usando la función de filtro wp_mail. add_filter('wp_mail','check_the_mail_content'); Si mi condición satisfecha entonces el correo debe ir si no tengo que dejar, mi función es
add_filter('wp_mail','check_the_mail_content');
function check_the_mail_content($query){
    if(mycondition){
         //mail should go.
    }
    else{
        //stop the mail.
   }
}
por favor ayuda....


Solución 1

Filtro
'phpmailer_init'
, No
'wp_mail'
. Para evitar enviar el correo restablece el objeto PHPMailer. Prototipo (no probado):
add_action( 'phpmailer_init', 'wpse_53612_conditional_mail_stop' );

function wpse_53612_conditional_mail_stop( $phpmailer )
{
    ! my_condition() and $phpmailer = new stdClass;
}
add_action( 'phpmailer_init', 'wpse_53612_conditional_mail_stop' );

function wpse_53612_conditional_mail_stop( $phpmailer )
{
    ! my_condition() and $phpmailer = new stdClass;
}
.

Solución 2

if(mycondition){
    wp_mail(themail@youwant, $subject, $message)
}else{
    // NOTHING SPECIAL
}
if(mycondition){
    wp_mail(themail@youwant, $subject, $message)
}else{
    // NOTHING SPECIAL
}
.

Solución 3

Por desgracia, ese filtro particular no es verificado después de usarlo. Aquí está el uso de ese filtro de núcleo:
extract( apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers', 'attachments' ) ) );
Así que todo ese filtro es poblar el
$to
,
$subject
,
$message
,
$headers
, y
$attechments
varaibles. No es una acción del gancho, así que mientras que probablemente podrías lanzar algún tipo de operación de terminación ahí, realmente no debería.

Idealmente, usted sería capaz de volver
false
desde su función de filtración para matar la operación, pero la función no está establecida en esa dirección. En cambio, recomiendo que engancha a la
phpmailer_init
acción.

Es la última acción en la
wp_mail()
función y se pasa una referencia a la actual
$phpmailer
objeto que hace el envío por correo. Esta función debe impedir que correo enviando:
class fakemailer {
    public function Send() {
        throw new phpmailerException( 'Cancelling mail' );
    }
}

if ( ! class_exists( 'phpmailerException' ) ) :
class phpmailerException extends Exception {
    public function errorMessage() {
        $errorMsg = '<strong>' . 

$this->getMessage() . "</strong><br />\n"; return $errorMsg; } } add_action( 'phpmailer_init', 'wpse_53612_fakemailer' ); function wpse_53612_fakemailer( $phpmailer ) { if ( ! /* condition */ ) $phpmailer = new fakemailer(); }
Esto debe substituir la
$phpmailer
objeto con una instancia de la clase de correo falsa.

Esta clase falsa sólo contiene un
Send()
método que inmediatamente se produce una excepción de tipo
phpmailerException
. El
wp_mail()
función capturar esta excepción y volver
false
de forma predeterminada.

No de la solución más performantes del mundo... que debe realmente ser verificando condiciones antes de siquiera llamar
wp_mail()
(como sugerido por @Zaidar), pero si debe usar un gancho, esta es una manera de hacerlo..





Problemas relacionados

wp_mail está definido

¿Cómo conectar wp_mail para agregar un email personalizado como BCC para cada envió correo electrónico?

¿Debo usar la función wp_mail() estándar para un theme premium?

¿Wp_mail trabajo en frontend plantilla archivo?

Necesita aclaraciones sobre cómo correctamente llamar wp_mail()

¿wp_mail destinatarios matriz no enviar?

¿wp_mail: matriz como $to múltiples correos electrónicos o simple correo electrónico con todos los identificadores de correo electrónico en él?

Fatal error: llamada a la función wp_mail()

Cambio de correo y nombre para mostrar con una acción de filtrado

Validar emails en matriz mediante foreach

wp_mail quitar sitename de asunto del correo electrónico

¿Cómo anular el encabezado de mensaje ID de wp_mail función?

Source: Stack Exchange Inc; License: cc by-sa 3.0 Contacto / Contact