Woocommerce:挂接woocommerce_applied_coupon动作时如何获取客户邮箱?
woocommerce_applied_coupon 钩子中获取客户信息的实现说明 钩子上下文的信息可用性
woocommerce_applied_coupon 是WooCommerce购物车流程中的内置动作,原生回调仅接收优惠券代码作为入参,但在钩子执行的完整上下文里,不需要额外传参即可通过WooCommerce内置全局对象获取全量客户信息,完全可以支撑Mailchimp联系人定位的需求。
可获取的客户信息与获取路径
- 已登录用户:可通过
WC()->cart->get_customer()获取封装好的客户对象,直接读取用户ID、注册邮箱、姓名、自定义用户字段等信息,匹配Mailchimp联系人的核心识别字段(邮箱) - 未登录访客:该客户对象会自动读取暂存在WooCommerce会话中的访客联系信息(包括用户提前填写的收货邮箱、姓名、联系电话),无需等待订单提交即可获取有效联系标识
- 全局辅助校验:可搭配
wp_get_current_user()获取登录用户的补充字段,或者通过WC()->session读取访客的暂存行为数据,做更精准的身份匹配
面向Mailchimp打标场景的实现注意项
- 增加空值兜底:部分访客在进入购物车初期、尚未填写任何联系信息时就触发优惠券应用动作,此时拿到的客户邮箱为空,需要直接跳过逻辑,避免无效的接口调用
- 增加防重复触发机制:用户可能反复点击“应用优惠券”按钮造成钩子多次执行,可将已处理的优惠券代码存入WooCommerce会话做标记,同一个用户对同一张优惠券仅执行一次Mailchimp标签更新,避免触发接口频率限制
- 增加优惠券匹配前置判断:在回调逻辑最开头判断当前应用的优惠券是否为需要追踪的目标券,非目标券直接终止逻辑,降低不必要的性能消耗
参考实现代码
add_action('woocommerce_applied_coupon', 'sync_mailchimp_tag_on_coupon_apply'); function sync_mailchimp_tag_on_coupon_apply($coupon_code) { // 匹配目标追踪优惠券 $tracked_coupon = 'NEWYEAR15'; if ($coupon_code !== $tracked_coupon) return; // 获取当前场景下的客户信息 $current_customer = WC()->cart->get_customer(); $customer_email = $current_customer->get_email(); // 无有效邮箱直接跳过 if (empty($customer_email)) return; // 会话防重复校验 $processed_list = WC()->session->get('mailchimp_synced_coupons', []); if (in_array($coupon_code, $processed_list)) return; // 此处替换为你的Mailchimp接口调用逻辑:为$customer_email对应的联系人追加指定标签 // 完成后更新会话标记 $processed_list[] = $coupon_code; WC()->session->set('mailchimp_synced_coupons', $processed_list); }
内容的提问来源于stack exchange,提问作者Guido Goluke
相关产品推荐
相关产品推荐

