Как добавить пользовательский тег в контактную форму 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.
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]