首页 > 解决方案 > 仅针对具有处理状态的已付款订单发送 WooCommerce 新订单电子邮件通知

问题描述

Woocommerce 的正常行为是:

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

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

首先,我尝试WooCommerce 向管理员发送电子邮件通知以获取特定的订单状态应答代码,该代码非常适合成功触发订单状态“处理”的“新订单”电子邮件,但是电子邮件仍然会在订单状态“保留”时发送(所以有时它可能会发送两次)。

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

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

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

然后,如果订单状态为保留应答代码,我尝试禁用 WooCommerce 新订单电子邮件通知。

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

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

至:

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

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

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

标签: phpwordpresswoocommerceordersemail-notifications

解决方案


这就是我设法使工作正常,完全消除了所有新订单触发器的可能性如 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+ 中重新发送新订单通知


推荐阅读