向特定推荐人发送联系人表格-通过电子邮件发送给Adres

时间:2016-08-13 作者:alarmschijf

我的目标是有一个表格,可以发送到不同的电子邮件地址,这取决于推荐人。

例如:如果有人愿意共享此链接:www.example。com/form/referer1表格应通过电子邮件发送至:[email protected]如果其他人共享链接www.example。com/form/referer2表格应通过电子邮件发送至[email protected]

可以只使用一个表单来完成吗。而不是为每个用户创建一个新表单。如果是,如何?这可以通过我目前使用的强大插件来实现吗。

希望有人能帮忙。提前谢谢你。

1 个回复
最合适的回答,由SO网友:bynicolas 整理而成

我认为这是可以实现的。

我的第一个想法是使用端点并根据查询字符串修改收件人电子邮件。但看看强大的钩子,我认为唯一适合这个的是frm_to_email 滤器它是在发送之后应用的(我们的查询字符串不再可用)。

但我们仍然可以通过使用$_POST 变量_wp_http_referer 钥匙

我们仍然需要添加endpoint 对于WP,如果没有,我们将得到404个错误,因为WP不知道如何处理动态URL。

假设如下:,

您的表单位于一个名为表单的页面上,我们将使用一个端点引用器来识别传入的请求,因此我们会有一个相对URL/form/referer/bob, 哪里bob 是传入URL的可变部分,因此首先让我们添加端点

add_action( \'init\', \'wpse_235869_add_endpoint\');
function wpse_235869_add_endpoint() {
  add_rewrite_endpoint( \'referer\', EP_PAGES ); // EP_PAGES is mask telling to listen for the referer endpoint on all PAGES
}
这添加了一个端点,该端点将转换为查询字符串,如/form?referer=bob

然后我们需要告诉WP监听我们的新查询字符串referer

add_filter( \'query_vars\', \'wpse_235869_add_queryvars\' );
function wpse_235869_add_queryvars( $query_vars ) {
  $query_vars[] = \'referer\';
  return $query_vars;
} 
完成后,我们可以继续编写formidable form filter.

在发送表格时$_POST 变量是用我们的_wp_http_referer 键,在本例中[_wp_http_referer] => /form/referer/bob/

所以我们强大的过滤器看起来像这样

add_filter(\'frm_to_email\', \'custom_set_email_value\', 10, 4);
function custom_set_email_value($recipients, $values, $form_id, $args){

  if( isset($_POST[\'_wp_http_referer\']) ) { 
    preg_match( \'#/form/referer/#\', $_POST[\'_wp_http_referer\'], $matches );  // check for our endpoint pattern so we don\'t try to modify recipients on regular forms.
    if ( $matches[0] != \'/form/referer/\') // If the _wp_http_referer does not match our endpoint, bail out.
      return $recipients;

    $referer = explode( \'/form/referer\', $_POST[\'_wp_http_referer\'] )[1]; // get our recipient from the referer.
    $recipient = str_replace( \'/\', \'\' , $referer ); // remove forward slashes from $rerefer so we can use in email address.


    $recipients[0] = $recipient . \'@example.com\'; // rebuild our recipients array before sending. This, in our example, would be [email protected]

  }

  return $recipients;

}

相关推荐

is_email gives me error

正如您在该链接上看到的:https://cixme.deniz-tasarim.site/video-upload/单击提交按钮后,wp表示我的电子邮件无效,但我输入了有效的电子邮件。Array ( [email_valid] => Email has no valid value ) 相关代码: if(is_email($email)) { $error[\'email_valid\'] = \"Email has no valid value\";&#