(WordPress) Контактная форма 7 прерывается в фильтре before_send_mail

Я использую контактную форму 7 в качестве почтовой системы на моем сайте WordPress. Я использую фильтр wpcf7_before_send_mail для отправки всех данных на внешний веб-сервис (SOAP). Когда я получаю сообщение «УСПЕХ» этого веб-сервиса, все должно продолжаться как обычно, но когда я получаю сообщение «СБОЙ», контактная форма 7 не должна отправлять электронное письмо, и на веб-сайте должно появляться другое выходное сообщение. Можно ли изменить это внутри функции?

<?

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
}

}
}

5

Решение

Вы можете пропустить письмо, используя:

add_filter( 'wpcf7_skip_mail',  '__return_true' );

Так как вы отключили JavaScript с помощью

add_filter( 'wpcf7_load_js', '__return_false' );

тогда вы можете использовать:

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

в вашем wpcf7_before_send_mail обратный вызов действия, где ваш пользовательский ответ об ошибке:

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!' )
);
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector