Używam formularza kontaktowego 7 jako systemu pocztowego na mojej stronie WordPress. Używam filtru wpcf7_before_send_mail, aby wysłać wszystkie dane do zewnętrznej usługi sieciowej (SOAP). Kiedy otrzymam komunikat "SUKCESU" tego serwisu, wszystkie powinny być normalne, ale kiedy otrzymam komunikat "NIEPOWODZENIE", formularz kontaktowy 7 nie powinien wysyłać wiadomości e-mail, a na stronie powinna się pojawić inna wiadomość wyjściowa. Czy można to zmienić w funkcji?(Wordpress) Formularz kontaktowy 7 Przerwij filtr 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
}
}
}
Brakowało przecinka po div w swojej funkcji, ale dzięki temu działa idealnie. Czy mógłbyś pokazać mi, gdzie znalazłeś te informacje? Chciałbym się uczyć, zamiast tylko kopiować i wklejać. –
Cieszę się, że to zadziałało, dzięki za korektę literówki. Oczywiście, po prostu pracowałem nad kodem źródłowym tej wtyczki, próbowałem różnych pomysłów, ten działał, inne nie. Więc nie było tu żadnej magii, poza spędzaniem czasu * z odrobiną ręcznej pracy próbnej ;-) @WarreBuysse – birgire
Wciąż wpadam na ten sam problem, nie do końca rozumiejąc kod źródłowy, jak sądzę. Dziękuję za wyjaśnienie. To oczywiście działało idealnie. Przyjmuję twoją odpowiedź. Dzięki jeszcze raz! –