多个页面共享一个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(){ ?> <script type="text/javascript"> jQuery(document).ready(function($){ // 这个收件人地址用jquery从html dom某个元素抓取也好 // 用WordPressd get_post_meta函数获取也没问题,不管怎样搞个地址过来 var to_email = 'xxxx@gmail.com'; // 创建隐藏字段 $('#contact-form-1478').append('<input type="hidden" name="to-email" value="'+to_email+'"> '); }) </script> <?php } 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被禁用,就什么也发不出去了。
请问如何将选择的结果 传输到thanks页面。比如:感谢“李四”的咨询。。。。你的电话是xxxxx
假设填写”李四”的字段名称是[your-name],填写电话的是[your-phone]
那么你可以到表单编辑页面message选项卡下,把Sender’s message was sent successfully的值改为“感谢[your-name]的咨询。。。。你的电话是[your-phone]”
Hi Sola,
我只想在有使用contact form 7这个插件的页面调用这个插件的js和css,这个怎么做?
我的网站使用了几个免费插件,激活后会整站都输出了它们的js和css,导致页面内容过多加载有点慢
期待你的回复
谢谢!
可以通过在wp-config.php里定义define(‘WPCF7_LOAD_CSS’, false);禁用,具体文档看这里
http://contactform7.com/loading-javascript-and-stylesheet-only-when-it-is-necessary/
有个叫kai的朋友在我的留言板上问了你一个关于pods插件如何设置conditional fields问题,如果你有兴趣回答就看一下
https://www.solagirl.net/guestbook/comment-page-5#comment-32505
我的办法是使用一个叫做“ Plugin Organizer‘的插件,可以设置wp的某些插件只在指定的页面加载或者不加载。