2015-09-22 9 views
5

में निरस्त करें मैं अपनी वर्डप्रेस वेबसाइट पर मेलिंग सिस्टम के रूप में संपर्क फ़ॉर्म 7 का उपयोग कर रहा हूं। मैं सभी डेटा को बाहरी webservice (SOAP) में भेजने के लिए wpcf7_before_send_mail फ़िल्टर का उपयोग करता हूं। जब मुझे उस webservice का "सफलता" संदेश प्राप्त होता है, तो सभी को सामान्य के रूप में जारी रखना चाहिए, लेकिन जब मुझे "FAILED" संदेश प्राप्त होता है, तो संपर्क फ़ॉर्म 7 को ईमेल नहीं भेजना चाहिए और वेबसाइट पर एक अलग आउटपुट संदेश दिखाना चाहिए। क्या यह कार्य के भीतर इसे बदलना संभव है?(वर्डप्रेस) संपर्क फ़ॉर्म 7 पहले_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 
} 

} 
} 

उत्तर

4

आप का उपयोग करके मेल को छोड़ सकते हैं:

add_filter('wpcf7_skip_mail', '__return_true'); 

जब से तुम विकलांग

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

आपने अपने फ़ंक्शन में div के बाद एक अल्पविराम को याद किया, लेकिन इसके साथ यह पूरी तरह से काम करता है। क्या आप मुझे यह दिखाएंगे कि आपको यह जानकारी कहां मिली? मैं सिर्फ कॉपी-पेस्ट के बजाय सीखना चाहता हूं। –

+0

यह सुनकर खुशी हुई कि यह आपके लिए काम करता है, टाइपो सुधार के लिए धन्यवाद। निश्चित रूप से, मैंने अभी उस प्लगइन के स्रोत कोड के माध्यम से काम किया है, मैंने विभिन्न विचारों की कोशिश की, यह एक काम किया, दूसरे ने नहीं किया। तो यहां मैन्युअल परीक्षण श्रम के डैश के साथ * समय * खर्च करने के अलावा, काम पर कोई जादू नहीं था ;-) @WarreBuysse – birgire

+0

मैं उसी समस्या के खिलाफ बंपिंग करता हूं, वास्तव में मुझे लगता है कि स्रोत कोड को समझ में नहीं आता है। स्पष्टीकरण के लिए धन्यवाद। यह, जाहिर है, पूरी तरह से काम किया। मैं आपका जवाब स्वीकार करूंगा। एक बार फिर धन्यवाद! –

संबंधित मुद्दे