如何集成Contact Form 7与WooCommerce产品单页实现PDF下载及邮件发送
解决Contact Form 7集成WooCommerce产品页的PDF下载与邮件发送问题
一、先搞定邮件发送故障
邮件发不出去大概率是CF7配置或服务器邮件环境的问题,按以下步骤排查:
- 检查CF7核心邮件设置:
进入「Contact > Contact Forms」编辑目标表单,切换到「邮件」标签:- 收件人填对管理员邮箱,发件人必须用和域名一致的邮箱(比如
admin@yourshop.com,别用默认的wordpress@xxx,容易被判定为垃圾邮件) - 主题和正文要正确调用表单字段,比如用
[your-name]、[your-email],确保字段短代码和表单内的字段名完全对应 - 若需要HTML格式邮件,勾选「使用HTML内容类型」
- 切换到「邮件(2)」标签,开启后填写用户的邮箱字段(比如
[your-email]),设置好给用户的确认邮件内容
- 收件人填对管理员邮箱,发件人必须用和域名一致的邮箱(比如
- 测试CF7基础邮件功能:
在「邮件」标签页点击「邮件测试」,输入测试邮箱验证。若收不到,直接改用SMTP方案,别纠结默认邮件函数 - 配置SMTP发邮件:
安装WP Mail SMTP插件,配置主机商提供的SMTP信息,或使用SendGrid、Gmail的SMTP服务(Gmail需开启应用密码),这步能解决90%的邮件发送问题
二、实现提交表单后自动下载PDF
CF7本身不带下载功能,需要通过钩子加代码实现:
- 准备PDF文件:
将PDF上传到WordPress媒体库,复制文件的永久链接(比如https://yourshop.com/wp-content/uploads/2024/05/your-product.pdf) - 添加PHP触发下载代码:
打开主题的functions.php(怕误改主题就用Code Snippets插件),粘贴以下代码:
记得替换代码中的// CF7提交成功后触发PDF下载 add_action( 'wpcf7_mail_sent', 'cf7_trigger_pdf_download' ); function cf7_trigger_pdf_download( $contact_form ) { // 替换为你的CF7表单ID(编辑表单时URL中的?post=xxx,xxx即为ID) $target_form_id = 123; if ( $contact_form->id() !== $target_form_id ) return; $submission = WPCF7_Submission::get_instance(); if ( !$submission ) return; // 可添加字段验证,比如检查邮箱有效性 $posted_data = $submission->get_posted_data(); if ( empty( $posted_data['your-email'] ) || !is_email( $posted_data['your-email'] ) ) return; // 替换为你的PDF链接 $pdf_url = 'https://yourshop.com/wp-content/uploads/2024/05/your-product.pdf'; $pdf_path = get_attached_file( attachment_url_to_postid( $pdf_url ) ); // 输出下载头信息 if ( !headers_sent() && file_exists( $pdf_path ) ) { header( 'Content-Type: application/pdf' ); header( 'Content-Disposition: attachment; filename="your-product-name.pdf"' ); header( 'Content-Length: ' . filesize( $pdf_path ) ); readfile( $pdf_path ); exit; } }$target_form_id和$pdf_url为你自己的信息 - 备选JS触发方案(若PHP下载失效):
添加一段JS代码,通过前端触发下载:
将这段JS加到主题的自定义JS区域,或通过CF7的「附加设置」模块插入document.addEventListener( 'wpcf7mailsent', function( e ) { // 替换为你的PDF链接 window.open( 'https://yourshop.com/wp-content/uploads/2024/05/your-product.pdf', '_blank' ); }, false );
三、检查WooCommerce产品页的表单嵌入
- 确认产品页中的CF7短代码正确,比如
[contact-form-7 id="123" title="产品询盘表单"],不要写错表单ID - 排查冲突:暂时禁用其他插件(如缓存、其他表单类插件),切换到默认主题(比如Twenty Twenty-Four)测试,确认是否是插件/主题冲突导致的问题
四、调试技巧
- 开启WP_DEBUG:在
wp-config.php中设置define( 'WP_DEBUG', true );,查看是否有报错信息 - 查看CF7提交日志:进入「Contact > Contact Forms > 工具」查看提交记录,确认表单是否真的提交成功
- 检查服务器日志:联系主机商获取error_log文件,查看是否有邮件或下载相关的错误记录
内容的提问来源于stack exchange,提问作者anindya goswami
相关产品推荐
相关产品推荐

