2015-09-22 14 views
5

Tôi đang sử dụng Mẫu Liên hệ 7 làm hệ thống gửi thư trên trang web WordPress của mình. Tôi sử dụng bộ lọc wpcf7_before_send_mail để gửi tất cả dữ liệu đến một dịch vụ web bên ngoài (SOAP). Khi tôi nhận được thông báo "THÀNH CÔNG" của dịch vụ web đó, tất cả sẽ tiếp tục như bình thường, nhưng khi tôi nhận được thông báo "FAILED", liên hệ với biểu mẫu 7 sẽ không gửi email và thông báo đầu ra khác sẽ xuất hiện trên trang web. Có thể thay đổi điều này trong hàm không?(Wordpress) Mẫu Liên hệ 7 hủy bỏ trong bộ lọc 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 
} 

} 
} 

Trả lời

4

Bạn có thể bỏ qua đường bưu điện bằng cách sử dụng:

add_filter('wpcf7_skip_mail', '__return_true'); 

Vì bạn đã vô hiệu hóa javascript với

add_filter('wpcf7_load_js', '__return_false'); 

sau đó bạn có thể sử dụng:

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

trong vòng hành động wpcf7_before_send_mail c của bạn allback, trong đó phản hồi lỗi tùy chỉnh của bạn là:

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

Bạn đã bỏ lỡ dấu phẩy sau div trong chức năng của bạn, nhưng nó bị lỗi hoàn toàn. Bạn có thể cho tôi thấy nơi bạn tìm thấy thông tin này không? Tôi muốn học thay vì chỉ sao chép-dán. –

+0

Vui mừng khi biết nó hoạt động cho bạn, cảm ơn chỉnh sửa lỗi chính tả. Chắc chắn, tôi chỉ làm việc thông qua mã nguồn của plugin đó, tôi đã thử nhiều ý tưởng khác nhau, cái này hoạt động, cái kia thì không. Vì vậy, không có phép thuật trong công việc ở đây, khác hơn là chi tiêu * thời gian * với một dấu gạch ngang của lao động thử nghiệm thủ công ;-) @WarreBuysse – birgire

+0

Tôi tiếp tục va chạm với cùng một vấn đề, không thực sự hiểu mã nguồn tôi đoán. Cảm ơn lời giải thích. Nó, rõ ràng, làm việc hoàn hảo. Tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn một lần nữa! –

Các vấn đề liên quan