2015-05-29 25 views
6

tarafından yalnızca bir iletişim formu için oluşturuldu. Sitede, Contact Form 7 kullanılarak oluşturulan çeşitli formlarla çalışıyorum. Bu formlardan biri için, bir gizli kullanarak topladığım değişkenleri iletiyorum giriş alanı formda.İletişim Formu 7: wpcf7_before_send_mail kullanılarak oluşturulan hook kullanımı

add_action('wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body'); 

function wpcf7_add_text_to_mail_body($contact_form){ 
    $values_list = $_POST['valsitems']; 
    $values_str = implode(", ", $values_list); 

    // get mail property 
    $mail = $contact_form->prop('mail'); // returns array 

    // add content to email body 
    $mail['body'] .= 'INDUSTRIES SELECTED'; 
    $mail['body'] .= $values_list; 


    // set mail property with changed value(s) 
    $contact_form->set_properties(array('mail' => $mail)); 

} 

ben anlamaya çalışıyorum: Ben wpcf7_before_send_mail kanca kullanarak e-postaya bu değişkenleri geçirerek, ancak bu değerler her e-posta içine geçiyoruz İşte kod (Ben de statik metin olarak dinamik değişkenler eklendi) Bu değerleri yalnızca form kimliği e-posta şablonlarından birine, muhtemelen form kimliği üzerinden iletmek için.

cevap

8

İletişim Formu 7, form kimliğini saklamak için gizli giriş türünü kullanır. Gizli alan adı _wpcf7'u kullanır. Form kimliğini bu şekilde alabilirsiniz.

$form_id = $contact_form->posted_data['_wpcf7']; 

Yani nihai kod bu yardımcı olur

add_action('wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body'); 

function wpcf7_add_text_to_mail_body($contact_form){ 
$form_id = $contact_form->posted_data['_wpcf7']; 
if ($form_id == 123): // 123 => Your Form ID. 
    $values_list = $_POST['valsitems']; 
    $values_str = implode(", ", $values_list); 

    // get mail property 
    $mail = $contact_form->prop('mail'); // returns array 

    // add content to email body 
    $mail['body'] .= 'INDUSTRIES SELECTED'; 
    $mail['body'] .= $values_list; 


    // set mail property with changed value(s) 
    $contact_form->set_properties(array('mail' => $mail)); 
endif; 

} 

Umut olmalıdır.

+0

Teşekkürler adam) Günümü kaydettiniz –

+0

Form kimliği almak için '$ contact_form-> id()' kullanın. – frederikvdbe

1

Dinesh'in cevabını kullanıyordum, ama benim için çalışmayı bıraktı. Bunun yerine, şimdi ben teslim ediyorum forma özgü bir alan için kontrol ediyorum:

add_action('wpcf7_before_send_mail', 'wpcf7_add_text_to_mail_body'); 
function wpcf7_add_text_to_mail_body($contact_form){ 

    $submission = WPCF7_Submission::get_instance(); 
    $posted_data = $submission->get_posted_data(); 
    if(!empty($posted_data["dealer_email"])){ //use a field unique to your form 

     $email = trim($posted_data["dealer_email"]); 
     // more custom stuff here 
    } 
} 

bunu yapmak için kullanabilirsiniz Formlarınızın her birinde en az bir benzersiz form adını olduğundan emin olun. Form kimliğinin bir işlev aracılığıyla $ contact_form'dan alınması mümkün olabilir, ancak bu işe yaradı ve sonuçtan memnun kaldım.