本文详细介绍了如何在woocommerce中,利用wordpress的钩子(hooks)机制,在客户完成结账后发送自定义电子邮件。我们将探讨两种代码集成方式(`functions.php`或自定义插件),并通过示例代码演示如何结合订单详情(如支付方式和订单状态)来触发特定邮件,确保邮件发送的精准性和灵活性。
1. 代码集成方式选择
在WooCommerce中添加自定义功能代码,主要有两种推荐方式:
修改主题的 functions.php 文件: 这是最直接的方式,将代码添加到当前活动主题(推荐使用子主题)的 functions.php 文件中。这种方法适用于少量、简单的功能扩展。创建自定义插件: 对于更复杂、功能独立的扩展,或者需要跨主题使用的功能,创建自定义插件是更推荐的做法。插件能够更好地组织代码,方便管理和更新,且不会因主题切换而丢失功能。无论选择哪种方式,核心代码逻辑都是相同的。出于维护性和最佳实践考虑,我们强烈建议您在子主题的 functions.php 文件中进行修改,或者创建一个简单的自定义插件。
2. 理解WooCommerce钩子与邮件发送机制
WooCommerce提供了丰富的动作(Action)和过滤器(Filter)钩子,允许开发者在特定事件发生时执行自定义代码。本教程的目标是在客户完成结账后发送邮件,woocommerce_thankyou 是一个非常合适的动作钩子,它在订单“感谢页”加载时触发,并传递订单ID作为参数。
邮件发送的核心功能将使用WordPress内置的 wp_mail() 函数。这个函数能够发送HTML格式的邮件,支持自定义主题、内容和发件人信息。

一款基于自然语言处理技术的智能在线表单创建工具,可以帮助用户快速、高效地生成各类专业表单。


3. 实现自定义邮件发送逻辑
以下代码示例展示了如何在 woocommerce_thankyou 钩子上挂载一个函数,该函数会根据订单的支付方式和状态来发送一封自定义邮件。
<?phpfunction send_custom_email_after_checkout( $order_id ) { // 获取订单对象 $order = wc_get_order( $order_id ); // 检查订单对象是否有效 if ( ! $order ) { return; } // 获取订单的支付方式和当前状态 $payment_method = $order->get_payment_method(); $order_status = $order->get_status(); // 示例条件:如果支付方式是'bacs'(银行转账)且订单状态为'on-hold'(待处理) // 您可以根据实际需求修改这些条件,例如,如果想针对特定支付方式(如“支付方式A”) // 并且订单被置为“on-hold”状态(通常发生在银行转账或某些需要人工确认的支付方式) if ( 'bacs' === $payment_method && 'on-hold' === $order_status ) { // 获取收件人邮箱(使用订单的账单邮箱,更可靠,兼容访客下单) $to = $order->get_billing_email(); // 邮件主题 $subject = '您的订单已暂停处理 - [您的网站名称]'; // 邮件正文(HTML格式) $body = ' <html> <head> <title>您的订单已暂停处理</title> </head> <body> <p>亲爱的客户,</p> <p>感谢您在我们的网站上购物。您的订单 <strong>#' . $order->get_order_number() . '</strong> 已收到,但目前处于暂停处理状态。</p> <p>请注意,我们已收到您的订单,但需要您完成进一步的操作,例如银行转账确认,才能继续处理。</p> <p>您可以在此处查看订单详情:<a href="' . $order->get_view_order_url() . '">' . $order->get_view_order_url() . '</a></p> <p>如有任何疑问,请随时联系我们。</p> <p>此致,<br>您的 [您的网站名称] 团队</p> </body> </html> '; // 邮件头部信息,指定内容类型为HTML和发件人 $headers = array( 'Content-Type: text/html; charset=UTF-8', 'From: 您的网站名称 <your-email@example.com>' // 请替换为您的实际网站名称和邮箱地址 ); // 发送邮件 wp_mail( $to, $subject, $body, $headers ); }}add_action( 'woocommerce_thankyou', 'send_custom_email_after_checkout' );登录后复制
代码解析:
send_custom_email_after_checkout( $order_id ):这是一个自定义函数,它接收 woocommerce_thankyou 钩子传递的 order_id。$order = wc_get_order( $order_id );:通过订单ID获取WooCommerce订单对象,以便访问订单的各种属性。$payment_method = $order->get_payment_method();:获取订单使用的支付方式的ID。$order_status = $order->get_status();:获取订单的当前状态(例如 pending, processing, on-hold, completed 等)。if ( 'bacs' === $payment_method && 'on-hold' === $order_status ):这是一个关键的条件判断。它确保只有当订单使用特定的支付方式(例如 'bacs',即银行转账)并且订单状态为 'on-hold' 时,邮件才会被发送。您可以根据您的“支付方式A”的ID以及您希望触发邮件的订单状态来修改此条件。$to = $order->get_billing_email();:获取订单的账单邮箱作为收件人。这比使用 $current_user->user_email 更可靠,因为访客下单时 $current_user 可能不存在或不准确。$subject 和 $body:定义邮件的主题和内容。邮件正文支持HTML,您可以根据需要进行排版和美化。$headers:设置邮件的头部信息,指定邮件内容类型为HTML和发件人。wp_mail( $to, $subject, $body, $headers );:调用WordPress的邮件发送函数。add_action( 'woocommerce_thankyou', 'send_custom_email_after_checkout' );:将我们的自定义函数挂载到 woocommerce_thankyou 钩子上,使其在结账感谢页加载时执行。4. 注意事项与最佳实践
替换占位符: 请务必将代码中的 [您的网站名称] 和 your-email@example.com 替换为您的实际网站名称和发件人邮箱地址。准确的支付方式ID: 确保您在条件判断中使用的支付方式ID ('bacs') 与您实际目标支付方式的ID一致。您可以在WooCommerce后台的“WooCommerce” > “设置” > “支付”中查看支付方式的名称,但其内部ID可能需要通过代码调试或查看相关插件文档获取。订单状态: woocommerce_thankyou 钩子在订单创建后立即触发。如果您的逻辑依赖于订单的最终状态(例如,只有当订单真正变为“已取消”或“已完成”时才发送),您可能需要考虑使用其他钩子,如 woocommerce_order_status_on-hold 或 woocommerce_order_status_changed,这些钩子会在订单状态实际变更时触发。在本教程的示例中,我们通过在 woocommerce_thankyou 内部检查 get_status() 来实现。邮件内容: 邮件正文可以包含HTML标签,以便更好地展示信息。您可以利用订单对象 $order 的方法(如 get_order_number()、get_view_order_url() 等)来动态插入订单详情,提高邮件的个性化和实用性。错误处理与日志: 在生产环境中,建议为邮件发送添加错误处理和日志记录机制,以便在邮件发送失败时能够及时发现问题。SMTP配置: 默认情况下,WordPress使用PHP的 mail() 函数发送邮件,这可能导致邮件被标记为垃圾邮件或发送失败。强烈建议安装并配置一个SMTP插件(如WP Mail SMTP),通过专业的邮件服务发送邮件,以提高送达率。区分自定义邮件与WooCommerce内置邮件: 本教程示例是使用 wp_mail() 发送一封全新的、自定义内容的邮件。如果您的目标是触发WooCommerce内置的某个邮件模板(例如 WC_Email_Customer_On_Hold_Order),则需要使用不同的方法,通常涉及实例化对应的邮件类并调用其 trigger() 方法,这比直接使用 wp_mail() 更复杂。本示例侧重于直接发送自定义邮件。总结
通过上述步骤,您可以在WooCommerce结账流程中,根据特定的订单条件(如支付方式和订单状态),灵活地发送自定义电子邮件。这不仅增强了与客户的沟通,也为店铺运营提供了更精细的控制。请务必在测试环境中充分验证您的代码,确保其按预期工作,并遵循最佳实践来保证网站的稳定性和安全性。
以上就是WooCommerce 订单完成后的自定义邮件发送指南的详细内容,更多请关注php中文网其它相关文章!