如何通过Contact Form 7插件在邮件中发送WooCommerce购物车商品
实现WooCommerce快速订单表单+购物车详情邮件推送方案
1. 创建仅含手机号的Contact Form7表单
在WordPress后台「联系我们 → 添加新」页面,创建极简表单,代码如下:
<label> 手机号 [tel* phone-number id:quick-order-phone] </label> [submit "提交快速订单"]
用tel*确保字段必填,ID用于后续样式或逻辑拓展。
2. 编写函数获取并传递购物车详情
在主题的functions.php(或自定义插件)中添加以下代码,实现购物车数据的抓取与邮件追加:
// 生成购物车详情HTML function get_wc_cart_details() { if ( ! WC()->cart->is_empty() ) { $cart_html = '<h3>购物车商品明细</h3><ul>'; foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; $quantity = $cart_item['quantity']; $total_price = wc_price( $product->get_price() * $quantity ); $cart_html .= sprintf( '<li>%s × %s - %s</li>', $product->get_name(), $quantity, $total_price ); } $cart_html .= '</ul><p>订单总计: ' . WC()->cart->get_cart_total() . '</p>'; return $cart_html; } else { return '<p>当前购物车为空</p>'; } } // 将购物车详情追加到CF7邮件 add_action( 'wpcf7_before_send_mail', 'add_cart_details_to_cf7_mail' ); function add_cart_details_to_cf7_mail( $contact_form ) { $submission = WPCF7_Submission::get_instance(); if ( $submission ) { $cart_details = get_wc_cart_details(); $mail = $contact_form->prop( 'mail' ); $mail['body'] .= "\n\n---\n" . $cart_details; $contact_form->set_prop( 'mail', $mail ); } }
这段代码会在CF7发送邮件前,自动把购物车商品列表、数量、总价拼接到邮件正文末尾。
3. 配置CF7邮件模板
在CF7的「邮件」设置面板中,设置基础邮件内容,比如:
用户提交了快速订单: 手机号: [phone-number] --- 购物车详情如下:
上述函数会自动将购物车内容追加到此处。
4. 将表单嵌入结账页面
两种嵌入方式可选:
- 短代码嵌入: 在结账页面编辑器中插入CF7生成的短代码,例如
[contact-form-7 id="123" title="快速订单表单"](替换为你的表单ID和标题)。 - 模板嵌入: 若要把表单放到结账页特定位置(如默认结账表单上方),修改主题的
checkout.php文件,添加代码:
echo do_shortcode( '[contact-form-7 id="123" title="快速订单表单"]' );
注意:修改主题文件建议使用子主题,避免主题更新丢失修改。
5. 可选:隐藏默认结账表单
如果只需要保留快速订单表单,可通过CSS隐藏默认结账模块:
.woocommerce-checkout .woocommerce-form.checkout { display: none; }
或通过PHP钩子移除:
add_action( 'init', 'remove_default_checkout_elements' ); function remove_default_checkout_elements() { remove_action( 'woocommerce_checkout_order_review', 'woocommerce_checkout_payment', 20 ); remove_action( 'woocommerce_checkout_after_customer_details', 'woocommerce_checkout_shipping' ); }
内容的提问来源于stack exchange,提问作者Максим Грабов
相关产品推荐
相关产品推荐

