如何在Contact Form 7中添加自定义标签并更改电子邮件中的输出?

时间:2018-01-11 作者:Taj Khan

我需要动态数量的输入字段,即联系人表单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 );
}
和电子邮件功能联系方式-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 个回复
最合适的回答,由SO网友:mmm 整理而成

在第一步,即要显示的表单中,您可以保留已编码的内容。

然后,您可以这样做以在电子邮件中生成结果:

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]

结束

相关推荐

如何在Contact Form 7中添加自定义标签并更改电子邮件中的输出? - 小码农CODE - 行之有效找到问题解决它

如何在Contact Form 7中添加自定义标签并更改电子邮件中的输出?

时间:2018-01-11 作者:Taj Khan

我需要动态数量的输入字段,即联系人表单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 );
}
和电子邮件功能联系方式-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 个回复
最合适的回答,由SO网友:mmm 整理而成

在第一步,即要显示的表单中,您可以保留已编码的内容。

然后,您可以这样做以在电子邮件中生成结果:

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]

相关推荐