2015-09-22 24 views
5

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 
} 

} 
} 

Odpowiedz

4

Można pominąć pocztę za pomocą:

add_filter('wpcf7_skip_mail', '__return_true'); 

Skoro masz wyłączony javascript z

add_filter('wpcf7_load_js', '__return_false'); 

następnie można użyć:

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

zasięgu twoja akcja wpcf7_before_send_mail allback, gdzie niestandardowa odpowiedź na błąd:

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

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ć. –

+0

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

+0

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! –