多个页面共享一个contact form 7表单,希望每个页面表单的收件人根据页面信息而定,比如从custom field里读取一个email地址,可以使用下面的方法实现,代码放入主题的functions.php。
创建contact表单
创建表单没什么特殊的地方,平时怎么写现在还怎么写,收件人地址写一个固定的邮箱作为备用地址,当某个页面无法找到一个有效的收件人地址时,则发信到该邮箱。
插入contact表单
插入表单时,为了容易识别,给表单加一个html id,shortcode类似下面这样[contact-form-7 id="1478" title="Contact form 1" html_id="contact-form-1478"]
用javascript添加收件人地址
用jquery创建一个隐藏字段,存储收件人地址// 保证加载jquery
function load_jquery(){
wp_enqueue_script( 'jquery' );
}
add_action( 'wp_enqueue_script', 'load_jquery' );
// 在footer打印待执行脚本,创建隐藏字段
function print_script(){
?>
jQuery(document).ready(function($){
// 这个收件人地址用jquery从html dom某个元素抓取也好
// 用WordPressd get_post_meta函数获取也没问题,不管怎样搞个地址过来
var to_email = 'xxxx@gmail.com';
// 创建隐藏字段
$('#contact-form-1478').append(' ');
})
}
add_action( 'wp_footer', 'print_script');
用php动态更改收件人地址add_action("wpcf7_before_send_mail", "wpcf7_custom_email_template");
function wpcf7_custom_email_template(&$wpcf7_data) {
// 只处理id为1478的表单,1478是刚才创建的表单的id
if ($wpcf7_data->id == 1478) {
// “to-email” 是input字段的name
$to = $wpcf7_data->posted_data['to-email'];
if( !empty($to) && is_email($to) ){
// 如果email地址合法,更改表单的收件人地址
$wpcf7_data->mail['recipient'] = $to;
} else {
// 没找到email,或者email不合法,在信息里加上点说明
$wpcf7_data->mail['body'] .= "\n No recipient found";
}
}
}
这样就可以动态更改收件人地址了。
另外一种方法是,直接在form模版里创建收件人这个字段,to地址用shortcode写,在用js动态更改收件人字段的内容。只是这样没法设置备用地址,如果js被禁用,就什么也发不出去了。