我认为这是可以实现的。
我的第一个想法是使用端点并根据查询字符串修改收件人电子邮件。但看看强大的钩子,我认为唯一适合这个的是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;
}