php - 仅针对具有处理状态的已付款订单发送 WooCommerce 新订单电子邮件通知
问题描述
Woocommerce 的正常行为是:
- 如果订单处于“待处理”(等待付款)状态,则不会发送“新订单”电子邮件
- 如果订单处于“暂停”状态(等待确认),它会发送“新订单”电子邮件。
- 如果订单立即从“待处理”设置为“处理中”(通过支付网关) - 它会发送“新订单”电子邮件。
我只想在订单状态达到“处理中”时发送“新订单”电子邮件(无论之前的状态)
因此,最终目标是阻止 woocommerce 在订单状态“保留”时发送“新订单”电子邮件,并使其仅(并且始终)在状态变为“处理中”时发送。
首先,我尝试WooCommerce 向管理员发送电子邮件通知以获取特定的订单状态应答代码,该代码非常适合成功触发订单状态“处理”的“新订单”电子邮件,但是电子邮件仍然会在订单状态“保留”时发送(所以有时它可能会发送两次)。
尝试通过以下方式禁用“保留”状态的“新订单”电子邮件来解决此问题:
管理 >> Woocommerce >> 设置 >> 电子邮件
然后通过单击管理按钮禁用“新订单”订单电子邮件,不起作用(这完全禁用了电子邮件,即使在上述代码处理时触发它也完全停止发送)
然后,如果订单状态为保留应答代码,我尝试禁用 WooCommerce 新订单电子邮件通知。
但是它成功禁用了新订单电子邮件,但是如果订单从“暂停”变为“处理中”,您根本不会收到任何电子邮件,并且如果新订单直接设置为处理并且您有之前的触发代码电子邮件,那么您也有收到 2 封电子邮件的问题。切换状态:
return $order->get_status() === 'on-hold' ? '' : $recipient;
至:
return $order->get_status() === 'processing' ? '' : $recipient;
完全禁用“新订单”电子邮件。
我基本上想记录我在这方面的挣扎并分享我目前的解决方案,因为似乎有很多人有同样的意图,但没有明确简洁和实际功能性的方法来做到这一点。
解决方案
这就是我设法使工作正常,完全消除了所有新订单触发器的可能性(如 woocommerce 在此处提供的):
/**
* Unhook and remove WooCommerce all default "New Order" emails.
*/
add_action( 'woocommerce_email', 'unhook_those_pesky_emails' );
function unhook_those_pesky_emails( $email_class ) {
// New order emails
remove_action( 'woocommerce_order_status_on-hold_to_processing_notification', array( $email_class->emails['WC_Email_New_Order'], 'trigger' ) );
remove_action( 'woocommerce_order_status_pending_to_on-hold_notification', array( $email_class->emails['WC_Email_New_Order'], 'trigger' ) );
remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_New_Order'], 'trigger' ) );
}
并使用以下触发器(由@LoicTheAztec在此线程中提供)
/**
* trigger "New Order" email on "processing" status
*/
add_action( 'woocommerce_order_status_processing', 'process_new_order_notification', 20, 2 );
function process_new_order_notification( $order_id, $order ) {
// Send "New Email" notification (to admin)
WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );
}
它可能不干净,很可能不是最优化的方式,但这是我发现成功制作“新订单”电子邮件的唯一方式,仅在订单已支付(设置为处理状态)时发送,并希望它能够提供帮助其他人。
由于 WooCommerce 5+: 允许在 WooCommerce 5+ 中重新发送新订单通知
推荐阅读
- scala - Scala 对 true 块内的 Try() 调用中的 main if 和失败的相同回退
- java - 为编译的匿名内部类添加了“final”
- python - 如何在 Pandas 数据框中的特定位置插入一列?(更改熊猫数据框中的列顺序)
- python - Flask:如何终止 python 子进程
- install4j - 卸载期间弹出错误对话框
- javascript - 在 Javascript 中排队来自用户事件的 AJAX 请求
- javascript - 无法获取设备的推送令牌。检查您的 FCM 配置是否有效
- python-3.x - d[n:m][n:m] 和 df[n:m][m] 有什么区别?
- javascript - 如何在 React 中获取数据属性?
- dependencies - Yocto bin_package 中部署的库的依赖关系