繁体   English   中英

仅针对具有处理状态的已付款订单发送 WooCommerce 新订单 email 通知

[英]Send WooCommerce New Order email notification only for paid orders with processing status

Woocommerce 的正常行为是:

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

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

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

First I have tried WooCommerce send email notification to admin for specific order status answer code that works perfectly for successfully triggering the "New Order" email on order status "processing", however the email still gets send on order status "hold" (so sometimes它可能会发送两次)。

尝试通过禁用“新订单”email 来解决此问题,方法是转到:

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

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

然后我尝试禁用 WooCommerce 新订单 email 通知,如果订单状态为保留答案代码。

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

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

至:

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

完全禁用“新订单” email。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM