仅针对具有处理状态的付费订单发送 WooCommerce 新订单电子邮件通知

问题描述

Woocommerce 的正常行为是:

  • 如果订单是“待处理”(等待付款),则不会发送“新订单” 订购”电子邮件
  • 如果订单处于“暂停”状态(等待确认),则会发送“新订单”电子邮件
  • 如果订单立即从“待处理”设置为“处理中”(通过 支付网关) - 它发送“新订单”电子邮件

我只想在订单状态达到“处理中”(无论之前的状态)时发送“新订单”电子邮件

因此,最终目标是阻止 woocommerce 在订单状态为“保留”时发送“新订单”电子邮件,并使其仅(并且始终)在状态变为“处理中”时发送。

首先,我尝试了 WooCommerce send email notification to admin for specific order status 回答代码,该代码非常适合成功触发订单状态“处理中”的“新订单”电子邮件,但是电子邮件仍会在订单状态下发送“保留”(因此有时可能会发送两次)。

尝试通过以下方式禁用处于“保留”状态的“新订单”电子邮件解决此问题:

管理 >> Woocommerce >> 设置 >> 电子邮件

然后通过单击管理按钮禁用“新订单”订单电子邮件,不起作用(这完全禁用了电子邮件并且即使在上述代码处理时触发它也完全停止发送)

然后我尝试了Disable WooCommerce New order email notification if order status is On hold答案代码

然而,它成功禁用了新订单电子邮件,但如果订单从“暂停”变为“处理中”,您根本不会收到任何电子邮件,并且如果新订单直接设置为正在处理并且您拥有之前的触发电子邮件代码,那么您也有收到 2 封电子邮件的问题。切换状态:

return $order->get_status() === 'on-hold' ? '' : $recipient;

到:

return $order->get_status() === 'processing' ? '' : $recipient;

完全禁用“新订单”电子邮件

我基本上是想记录我在这方面的挣扎并分享我目前的解决方案,因为似乎有很多人有同样的意图,但没有清晰简洁和实际的功能方法

解决方法

这是我设法使工作正常的方法,完全消除了所有新订单触发的可能性(as provided here by 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','trigger' ) );
    remove_action( 'woocommerce_order_status_pending_to_processing_notification','trigger' ) );
}

并使用以下触发器(由@LoicTheAztec in this thread 提供)

/** 
 * 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+: Allow re-sending New Order Notification in WooCommerce 5+