仅针对支付并处于处理状态的订单发送WooCommerce新订单电子邮件通知

4

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 的答案代码。

然而,它成功地禁用了“新订单”电子邮件,但是如果订单从“挂起”转移到“处理中”,则根本不会收到任何电子邮件,而且如果直接将新订单设置为处理中并且您使用上述触发电子邮件的代码,则仍然会有接收两封电子邮件的问题。将状态从:

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

to:

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

禁用“新订单”电子邮件。

基本上,我想记录我的挣扎并分享我的当前解决方案,因为似乎有很多人有同样的意图,但没有明确简洁且实际有效的方法来做到这一点。


重要提示:请参阅此线程:https://dev59.com/9L_qa4cB1Zd3GeqPQ9tv#66604522 - LoicTheAztec
1个回答

6
这是我成功完成的工作,完全消除了所有新订单触发器的可能性如此提供的链接
/**
 * 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+ 中重新发送新订单通知


值得一提的是,在WooCommerce设置中,您仍然需要“启用”新订单通知电子邮件。 - SolaceBeforeDawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接