WordPress/WooCommerce订单按取货点触发呼叫及分址邮件配置需求
WooCommerce取货点触发电话通知+定向邮件推送解决方案
嘿,针对你们小型食品企业的这个场景,我整理了一套实用的WooCommerce适配方案,既能解决线下没法频繁查邮件的痛点,又能在客户线上下单后立刻触发对应取货点的电话通知+定向邮件,确保你们能及时收到订单提醒,缩短客户等待时间!
核心实现思路
我们会利用WooCommerce的woocommerce_thankyou钩子(这个钩子会在客户完成付款后立即触发),在钩子函数里完成以下几步:
- 提取订单的取货点信息
- 根据预设规则匹配对应取货点的邮件地址和电话号码
- 发送定向订单邮件到对应收件人
- 调用电话通知服务触发语音提醒
代码实现(添加到主题functions.php或自定义插件)
以下是完整的代码示例,你可以根据自己的实际配置调整细节:
add_action( 'woocommerce_thankyou', 'trigger_pickup_point_notifications', 10, 1 ); function trigger_pickup_point_notifications( $order_id ) { // 校验订单ID有效性 if ( ! $order_id ) return; // 获取订单对象 $order = wc_get_order( $order_id ); if ( ! $order ) return; // 获取取货点信息(这里替换为你实际存储取货点的字段名) // 示例:如果是自定义字段存储,用get_meta;如果是官方本地取货扩展,可能需要调整获取方式 $pickup_location = $order->get_meta( 'pickup_location', true ); // 定义取货点与通知信息的映射规则 $notification_map = array( '取货点A' => array( 'email' => 'x@yourdomain.com', 'phone' => '1234567890' // 电话号码格式根据你的电话服务要求调整 ), '取货点B' => array( 'email' => 'y@yourdomain.com', 'phone' => '0987654321' ), // 默认规则:匹配不到取货点时使用 'default' => array( 'email' => 'z@yourdomain.com', 'phone' => '1122334455' ) ); // 匹配对应的通知信息 $notify_details = isset( $notification_map[$pickup_location] ) ? $notification_map[$pickup_location] : $notification_map['default']; // 1. 发送定向订单邮件 $email_subject = "新取货订单通知:{$pickup_location}"; $email_content = "您好,有新的线上取货订单需要处理:\n\n"; $email_content .= "订单号:{$order->get_order_number()}\n"; $email_content .= "客户姓名:{$order->get_billing_first_name()} {$order->get_billing_last_name()}\n"; $email_content .= "下单时间:{$order->get_date_created()->format('Y-m-d H:i:s')}\n"; $email_content .= "订单详情链接:{$order->get_view_order_url()}\n"; // 使用WooCommerce内置邮件函数发送,确保样式统一 wc_mail( $notify_details['email'], $email_subject, $email_content ); // 2. 触发电话呼叫(以Twilio云电话服务为例,需先配置账号) $target_phone = $notify_details['phone']; $call_voice_message = "您好,{$pickup_location}收到新的线上取货订单,请尽快完成烘焙打包。"; // 以下是Twilio API集成示例(需先安装Twilio PHP库) /* require_once get_template_directory() . '/lib/twilio-php/src/Twilio/autoload.php'; use Twilio\Rest\Client; $twilio_sid = '你的Twilio账号SID'; $twilio_token = '你的Twilio授权令牌'; $twilio_from_phone = '你的Twilio电话号码'; $client = new Client($twilio_sid, $twilio_token); $client->calls->create( $target_phone, $twilio_from_phone, array( 'url' => 'https://yourdomain.com/call-message.xml' // 存放语音内容的XML文件地址 ) ); */ // 如果你暂时没有云电话服务,也可以替换为短信通知(逻辑类似,调用短信API即可) }
关键细节调整说明
- 取货点字段适配:如果你的取货点是用WooCommerce官方「本地取货」功能设置的,需要调整取货点的获取逻辑,比如通过
$order->get_shipping_method()或者检查配送地址的自定义字段,确保能正确拿到取货点名称。 - 电话服务选择:推荐用Twilio、Plivo这类成熟的云电话服务,集成简单且稳定,适合小型企业快速部署;如果预算有限,也可以用短信通知替代电话,代码逻辑类似。
- 邮件内容定制:你可以根据需要添加更多订单信息,比如商品列表、付款金额等,通过
$order->get_items()循环遍历商品即可。
额外优化建议
- 添加订单状态标记:触发通知后,给订单添加自定义状态(比如「待烘焙」),方便线下人员跟踪订单进度。
- 延迟触发选项:如果担心客户下单后立刻到店,可以设置5分钟的延迟触发通知,给车间预留一点缓冲时间(用
wp_schedule_single_event实现延迟执行)。 - 失败重试机制:给邮件和电话通知添加失败重试逻辑,避免因网络波动导致通知丢失。
内容的提问来源于stack exchange,提问作者Eduardo Tavcar




