2015-09-22 16 views
5

Utilizzo il modulo di contatto 7 come sistema di posta sul mio sito Web WordPress. Io uso il filtro wpcf7_before_send_mail per inviare tutti i dati a un servizio web esterno (SOAP). Quando ricevo il messaggio "SUCCESSO" di quel servizio web, tutto dovrebbe continuare normalmente, ma quando ricevo un messaggio "FALLITO", il modulo di contatto 7 non deve inviare una e-mail e sul sito Web dovrebbe apparire un messaggio di output diverso. È possibile modificare questo all'interno della funzione?(Wordpress) Modulo di contatto 7 interruzione nel filtro before_send_mail

<? 

add_filter('wpcf7_load_js', '__return_false'); 
add_filter('wpcf7_load_css', '__return_false'); 

add_action('wpcf7_before_send_mail', 'wpcf7_soap_service'); 


//Pushen via SOAP service naar servers 
function wpcf7_soap_service($contact_form) { 
$submission = WPCF7_Submission::get_instance(); 

if ($submission) { 

/*** POST variabelen ***/  
$posted_data = $submission->get_posted_data(); 

/*** SOAP settings ***/  
ini_set("soap.wsdl_cache_enabled", "0"); 

/*** variabelen opzetten ***/ 
define('BROADCAST_URL','XXX'); 
define('SIM_LOGIN', 'XXX'); 
define('SIM_PASSWORD', 'XXX'); 
define('ENV_KEY', 'XXX'); 

/*** login parameters ***/ 
$params = array(
    'username' => SIM_LOGIN, 
    'password' => SIM_PASSWORD, 
    'environmentKey' => ENV_KEY, 
); 

/*** client opzetten ***/ 
$client = new SoapClient(
    BROADCAST_URL, 
    array(
    'soap_version' => SOAP_1_1 
) 
); 

/*** Parameters ***/ 
$address["box"]   = $posted_data["box"]; 
$address["country"]  = $posted_data["country"]; 
$address["number"]  = $posted_data["streetnumber"]; 
$address["postalcode"] = $posted_data["postalcode"]; 
$address["street"]  = $posted_data["street"]; 
$address["town"]   = $posted_data["town"]; 

$birthdate    = $posted_data["birthdate"] . "T00:00:00"; 
$email     = $posted_data["email"]; 

$firstname    = $posted_data["firstname"]; 
$lastname     = $posted_data["lastname"]; 
$phone     = $posted_data["phone"]; 

/*** STDClass aanmaken met gevraagde data ***/ 
$std = new stdClass(); 

$std->Firstname   = $firstname; 
$std->Lastname   = $lastname; 
$std->Birthdate   = $birthdate; 
$std->Phone    = $phone; 
$std->Email    = $email; 

$std->Address = new stdClass(); 

$std->Address->Street   = $address["street"]; 
$std->Address->Number   = $address["number"]; 
$std->Address->Box   = $address["box"]; 
$std->Address->PostalCode  = $address["postalcode"]; 
$std->Address->Town   = $address["town"]; 
$std->Address->Country  = $address["country"]; 

if(!empty($_FILES['cv'])){ 

    $std->Files = new stdClass(); 

    $std->Files->File["FileName"]  = $_FILES["cv"]["name"]; 
    $std->Files->File["DataFile"]  = base64_encode($_FILES["cv"]["tmp_name"]); 
    $std->Files->File["FileType"]  = "CV"; 
} 

/*** Functie OpenSession ***/ 
try{ 
    $token = $client->OpenSession($params); 
}catch(SoapFault $ex){ 
    // ABORT OVER HERE 
} 

$token    = $token->OpenSessionResult; 

/*** Functie AddApplication ***/ 
try{ 
    $result = $client->AddApplication(array("token" => $token, "application" => $std)); 
}catch(SoapFault $ex){ 
    // ABORT OVER HERE 
} 

if($result->AddApplicationResult->Status == "Success"){ 
    // ABORT OVER HERE 
} 


/*** Functie CloseSession ***/ 
try{ 
    $app = $client->CloseSession($token); 
}catch(SoapFault $ex){ 
    // ABORT OVER HERE 
} 

} 
} 

risposta

4

È possibile saltare la posta utilizzando:

add_filter('wpcf7_skip_mail', '__return_true'); 

Dal momento che hai disattivato JavaScript con

add_filter('wpcf7_load_js', '__return_false'); 

allora si può usare:

add_filter('wpcf7_form_response_output', 'wpse_form_response_output', 10, 4); 

all'interno l'azione wpcf7_before_send_mail c allback, dove la tua risposta all'errore personalizzata è:

function wpse_form_response_output($output, $class, $content, $object) 
{ 
    return sprintf(
     '<div class="wpcf7-response-output wpcf7-display-none wpcf7-mail-sent-ng" 
      role="alert" style="display: block;">%s</div>', 
     __('SOAP ERROR - Mail not sent!') 
    ); 
} 
+0

Hai perso una virgola dopo il div nella tua funzione, ma con ciò funziona perfettamente. Ti dispiacerebbe mostrarmi dove hai trovato questa informazione? Mi piacerebbe imparare invece di solo copia-incolla. –

+0

Felice di sentire che ha funzionato per te, grazie per la correzione di errori di battitura. Certo, ho solo lavorato attraverso il codice sorgente di quel plugin, ho provato varie idee, questa ha funzionato, l'altra no. Quindi non c'era magia al lavoro qui, oltre al trascorrere * il tempo * con un pizzico di lavoro di prova manuale ;-) @WarreBuysse – birgire

+0

Continuo a urtare contro lo stesso problema, non comprendendo veramente il codice sorgente, immagino. Grazie per la spiegazione. Ovviamente, ha funzionato alla perfezione. Accetterò la tua risposta. Grazie ancora! –

Problemi correlati