web-dev-qa-db-ja.com

Contact Form 7:wpcf7_before_send_mailを使用して作成されたフックを、IDごとに1つの連絡先フォームのみに使用します

Contact Form 7を使用して作成されたいくつかのフォームを持つサイトで作業しています。これらのフォームの1つとして、フォームの非表示の入力フィールドを使用して収集した変数を渡します。 wpcf7_before_send_mailフックを使用してこれらの変数を電子メールに渡していますが、これらの値はすべての電子メールに渡されています(動的変数と静的テキストを追加しました)これがコードです。

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 ) );

 }

おそらくフォームIDを介して、これらの値を連絡先フォームのメールテンプレートの1つにのみ渡す方法を理解しようとしています。

12
ardev

Contact Form 7は非表示の入力タイプを使用してフォームIDを格納します。隠しフィールド名_ wpcf7を使用します。この方法でIdフォームを取得できます。

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

したがって、最終的なコードは

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;

}

お役に立てれば。

15
Dinesh Karki

私はDineshの回答を使用していましたが、機能しなくなりました。代わりに、送信するフォームに固有のフィールドを確認しています。

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
   }
}

これを行うために使用できる各フォームには、少なくとも1つの一意のフォーム名が含まれていることを確認してください。関数を介して$ contact_formからフォームIDを取得することはまだ可能かもしれませんが、これは機能し、結果に満足しました。

8
Jarom

このプラグインでは、フォームIDと送信済みフィールドを取得する方法が2015年以降変更されています。

フォームIDを取得するには、これを使用する必要があります。

$form_id = $contact_form->id();

提出データを取得するには、($ _ POSTの代わりに)これを使用する必要があります。

$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();

すべてをまとめると、スニペットは次のようになります。

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

    //Get the form ID
    $form_id = $contact_form->id();

    //Do something specifically for form with the ID "123"
    if( $form_id == 123 ) {
        $submission = WPCF7_Submission::get_instance();
        $posted_data = $submission->get_posted_data();
        $values_list = $posted_data['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 ) );
    }
}
2
Tessa