2015-09-22 14 views
5

Ich verwende das Kontaktformular 7 als Mailing-System auf meiner WordPress-Website. Ich verwende den Filter wpcf7_before_send_mail, um alle Daten an einen externen Webservice (SOAP) zu senden. Wenn ich eine "SUCCESS" -Nachricht von diesem Webservice erhalte, sollten alle wie gewohnt fortfahren, aber wenn ich eine "FAILED" -Nachricht erhalte, sollte Kontaktformular 7 keine E-Mail senden und eine andere Ausgabenachricht sollte auf der Webseite erscheinen. Ist es möglich, dies innerhalb der Funktion zu ändern?(Wordpress) Kontaktformular 7 Abbruch in before_send_mail Filter

<? 

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 
} 

} 
} 

Antwort

4

können Sie die E-Mail überspringen, indem Sie:

add_filter('wpcf7_skip_mail', '__return_true'); 

Da Sie JavaScript deaktiviert haben mit

add_filter('wpcf7_load_js', '__return_false'); 

dann können Sie verwenden:

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

innerhalb Ihre wpcf7_before_send_mail Aktion c Allback, wo Ihre benutzerdefinierte Fehlerantwort lautet:

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

Sie haben ein Komma nach dem Div in Ihrer Funktion verpasst, aber damit funktioniert es perfekt. Würde es Ihnen etwas ausmachen, mir zu zeigen, wo Sie diese Informationen gefunden haben? Ich würde gerne lernen statt nur kopieren und einfügen. –

+0

Ich freue mich zu hören, dass es für Sie funktioniert hat, danke für die Tippfehlerkorrektur. Sicher, ich habe gerade den Quellcode dieses Plugins durchgearbeitet, ich habe verschiedene Ideen ausprobiert, dieses hat funktioniert, das andere nicht. Also gab es keine Magie bei der Arbeit hier, außer Zeit mit einer Prise manueller Testarbeit zu verbringen ;-) @WarreBuysse – birgire

+0

Ich stoße weiter gegen das gleiche Problem, nicht wirklich den Quellcode verstehe ich denke. Danke für die Erklärung. Es hat offensichtlich, vollkommen, gearbeitet. Ich werde deine Antwort akzeptieren. Danke noch einmal! –

Verwandte Themen