Как добавить пользовательский тег в контактную форму 7 и изменить вывод в электронной почте?


Мне нужно динамическое количество полей ввода, т.Е. Вопросов и ответов в контактной форме 7 с моим пользовательским полем формы, которое было сгенерировано на основе набора вопросов, подходящего кандидату, он может быть 1 или 10. Также вот что я добавил, чтобы сделать это коротким, я все жестко закодировал вместо того, чтобы показывать вам запросы к базе данных и циклы

add_action( 'wpcf7_init', 'my_questions_field' );

function my_questions_field() {
   wpcf7_add_form_tag( 'my_questions', 'my_custom_question_form_tag_handler' , array( 'name-attr' => true ) );
}

function my_custom_question_form_tag_handler( $tag ) { 
    $input ='<label>Ques1?</label><input value="Ques1?" name="tag[]" type="hidden">';
    $input .= '<input name="ans[]"  type="text" value="ans1">';
    $input .= '<label>Ques2?</label><input name="tag[]"  value="Ques2?" type="hidden">';
    $input .= '<input name="ans[]"  type="text" value="ans2">';
    return $input;
}

Добавлено:

[tag]
[ans] 

В контактной форме 7 электронных писем от серверной части

Оговорка здесь в том, что я не знаю номера вопрос, который он будет отображать, основан на некоторых моих пользовательских запросах , количество вопросов может варьироваться от 1-10 или, может быть, даже больше, поэтому я использовал этот синтаксис.

Вывод в электронном письме, которое я получаю,

Ques1?,Ques2? 
ans1,ans2

Что мне нужно в электронной почте, так это

Ques1: Ans1
Ques2: Ans2

Я нашел функцию в contact-form-7/includes/functions.php

function wpcf7_flat_join( $input ) {
 $input = wpcf7_array_flatten( $input );
 $output = array();

 foreach ( (array) $input as $value ) {
  $output[] = trim( (string) $value );
 }

 return implode( ',', $output );
}

И функции электронной почты contact-form-7/includes/mail.php

private function replace_tags_callback( $matches, $html = false ) {
  // allow [[foo]] syntax for escaping a tag
  if ( $matches[1] == '[' && $matches[4] == ']' ) {
   return substr( $matches[0], 1, -1 );
  }

  $tag = $matches[0];
  $tagname = $matches[2];
  $values = $matches[3];

  if ( ! empty( $values ) ) {
   preg_match_all( '/"[^"]*"|\'[^\']*\'/', $values, $matches );
   $values = wpcf7_strip_quote_deep( $matches[0] );
  }

  $do_not_heat = false;

  if ( preg_match( '/^_raw_(.+)$/', $tagname, $matches ) ) {
   $tagname = trim( $matches[1] );
   $do_not_heat = true;
  }

  $format = '';

  if ( preg_match( '/^_format_(.+)$/', $tagname, $matches ) ) {
   $tagname = trim( $matches[1] );
   $format = $values[0];
  }

В Классе WPCF7_MailTaggedText

Но не в состоянии найти правильный решение

Просто хочу, чтобы контактная форма 7 по-разному обрабатывала входные данные из тегов que и ans.

Author: Taj Khan, 2018-01-11

1 answers

На первом этапе, в форме для отображения, вы можете сохранить то, что вы закодировали.

Затем вы можете сделать это, чтобы сгенерировать результат по электронной почте:

add_filter("wpcf7_posted_data", function ($posted_data) {

    $result = "";


    foreach ($posted_data["tag"] as $index => $question) {

        $answer = $posted_data["ans"][$index];

        $result .= "$question : $answer\n";

    }


    $posted_data["my_questions"] = $result;

    return $posted_data;

});

И в конфигурации электронной почты просто поставьте тег [my_questions]

 3
Author: mmm, 2018-01-11 21:55:19