Php 仅针对处于处理状态的已付款订单发送新订单电子邮件通知
商业的正常行为是:Php 仅针对处于处理状态的已付款订单发送新订单电子邮件通知,php,wordpress,woocommerce,orders,email-notifications,Php,Wordpress,Woocommerce,Orders,Email Notifications,商业的正常行为是: 如果订单“待定”(等待付款),则不会发送“新订单” 订购“电子邮件 如果订单“暂停”(等待确认),则发送“新订单”电子邮件 如果订单立即从“待定”设置为“处理”(通过 支付网关)-它发送“新订单”电子邮件 我只想在订单状态达到“处理”时发送“新订单”电子邮件(无论以前的状态如何) 因此,最终的目标是阻止woocommerce在订单状态为“保留”时发送“新订单”电子邮件,并使其仅在状态变为“处理”时发送(并且始终发送) 首先,我尝试了应答代码,该代码非常适合在订单状态为“处
- 如果订单“待定”(等待付款),则不会发送“新订单” 订购“电子邮件
- 如果订单“暂停”(等待确认),则发送“新订单”电子邮件
- 如果订单立即从“待定”设置为“处理”(通过 支付网关)-它发送“新订单”电子邮件
管理>>电子商务>>设置>>电子邮件 然后,通过单击“管理”按钮禁用“新订单”订单电子邮件将不起作用(这将完全禁用电子邮件,并且即使在通过上述代码进行处理时也会完全停止发送) 然后我试着回答密码 但是,它成功地禁用了新订单电子邮件,但是如果订单从“保留”变为“处理”,则您根本不会收到任何电子邮件,如果新订单直接设置为“处理”,并且您具有以前触发电子邮件的代码,则您也会遇到接收2封电子邮件的问题。从以下位置切换状态:
return $order->get_status() === 'on-hold' ? '' : $recipient;
致:
完全禁用“新订单”电子邮件
我基本上是想记录我在这方面的努力,并分享我目前的解决方案,因为似乎有相当多的人有同样的意图,但没有明确、简洁和实际的功能方式来完成这项工作。这就是我设法使其正常工作的原因,完全消除了所有新的订单触发可能性(): 并使用以下触发器(由@LoicTheAztec提供) 它可能不干净,也很可能不是最优化的方式,但这是我发现的唯一一种成功地使“新订单”电子邮件仅在订单已付款(设置为处理状态)时发送,并希望它能够帮助其他人的方式 自WooCommerce 5+以来: 重要提示:请参阅此线程:
return $order->get_status() === 'processing' ? '' : $recipient;
/**
* 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' ) );
}
/**
* 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 );
}