Wie füge ich ein benutzerdefiniertes Tag in Kontaktformular 7 hinzu und ändere die Ausgabe in Email?

Ich brauche eine dynamische Anzahl von Eingabefeldern, dh Frage und Antworten in Kontaktformular 7 mit meinem benutzerdefinierten Formular Feld es wurde auf der Grundlage der Frage erstellt, passt ein Kandidat es kann 1 oder es kann 10 auch hier ist, was ich hinzugefügt habe, nur um es kurz zu machen Ich habe alles fest programmiert, anstatt Ihnen databaseabfragen und -schleifen zu zeigen

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 =''; $input .= ''; $input .= ''; $input .= ''; return $input; } 

hinzugefügt :

 [tag] [ans] 

Im Kontaktformular 7 E-Mails aus dem Backend

Der Vorbehalt hier ist, ich weiß nicht die Anzahl der Frage wird es auf einige meiner benutzerdefinierten Abfragen basieren wird die Anzahl der Frage von 1 bis 10 oder vielleicht sogar mehr variieren, warum habe ich diese Syntax verwendet.

Die Ausgabe in der E-Mail, die ich bekomme, ist

 Ques1?,Ques2? ans1,ans2 

Was ich in E-Mail brauche ist

 Ques1: Ans1 Ques2: Ans2 

Ich habe die function in contact-form-7 / includes / functions.php gefunden

 function wpcf7_flat_join( $input ) { $input = wpcf7_array_flatten( $input ); $output = array(); foreach ( (array) $input as $value ) { $output[] = trim( (string) $value ); } return implode( ',', $output ); } 

und der E-Mail-function 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]; } 

in der class WPCF7_MailTaggedText

aber nicht in der Lage, die richtige Lösung zu finden

will nur Kontaktformular 7, um Eingaben von que und ans-Tag anders zu behandeln.

Solutions Collecting From Web of "Wie füge ich ein benutzerdefiniertes Tag in Kontaktformular 7 hinzu und ändere die Ausgabe in Email?"

Im ersten Schritt können Sie das anzuzeigende Formular behalten, was Sie codiert haben.

Dann können Sie dies tun, um das Ergebnis in der E-Mail zu generieren:

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

Und in der Konfiguration der E-Mail, einfach das Tag [my_questions]