【问题标题】:WooCommerce Product Vendors: Send notification to vendor for new order receivedWooCommerce 产品供应商:向供应商发送收到新订单的通知
【发布时间】:2018-05-12 20:26:15
【问题描述】:

我正在使用 WooCommerce Product Vendors 插件进行供应商管理。

目前,当收到新订单时,通知会发送给客户和管理员。一旦管理员将订单状态更改为处理中已完成,电子邮件就会发送给供应商。

但我需要在收到订单时发送通知电子邮件。

这是否可以通过在functions.php 中创建过滤器来实现,或者可以通过在收到订单时触发产品状态更改通知来实现?

【问题讨论】:

  • 默认情况下,订单状态为待付款,供应商将订单状态更改为处理中。

标签: wordpress woocommerce orders email-notifications vendors


【解决方案1】:

更新:添加了“新预订”电子邮件通知 ID...

有很多方法可以实现这一目标。 这里有 2 个:

1)。第一个,基于电子邮件 ID“新订单”。它已经过测试并且可以工作:

add_action ('woocommerce_email_customer_details', 'new_order_email_to_vendor', 20, 4 );
function new_order_email_to_vendor( $order, $sent_to_admin, $plain_text, $email ){
    if( in_array( $email->id, ['new_order', 'new_booking'] ) ){ 
        $mailer['WC_Product_Vendors_Order_Email_To_Vendor']->trigger( $order );
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。


2)。这是未经测试的,因为它基于订单状态更改条件。您可以在 if 语句中设置“from”订单状态或某些“to”订单状态或两者兼而有之……

这里我只使用“来自”“待处理”订单状态,因为在 Woocommerce 的付款过程中,所有订单始终设置为待处理状态:

add_action( 'woocommerce_order_status_changed', 'new_order_email_to_vendor', 10, 4 );
function new_order_email_to_vendor( $order_id, $old_status, $new_status, $order ){

    if ( in_array( $new_status, array( 'processing','completed') ) { // <== Updated
        $emails = WC()->mailer()->get_emails();
        $emails['WC_Product_Vendors_Order_Email_To_Vendor']->trigger( $order );
    }
}

代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

【讨论】:

  • 非常感谢您的回答,实际上当管理员将订单状态更改为 ProcessingCompleted 时会生成新的订单电子邮件。发送的第一封电子邮件是关于新预订的,可在此路径上找到:wp-content/plugins/woocommerce-bookings/templates/emails/admin-new-booking.php 所以我想用这个来触发该电子邮件。
  • 我们快到了,它会触发电子邮件,但该电子邮件与通常发送给供应商的电子邮件略有不同。需要触发的电子邮件地址为:woocommerce-product-vendors/templates/emails/order-email-to-vendor.php
  • 顺便说一句,我可以触发新的电子邮件事件,其中新的预订邮件流程开始。就像向管理员和客户生成新的订单电子邮件一样,我可以在那时触发供应商电子邮件。我无法找到实际的邮件功能(有几个,所以我不确定哪一个确切地称为新订单电子邮件)。而且我能够找到电子邮件模板但不明白;它们的名称和位置。也许这不是正确的方法,但它可以解决问题。您对此有何看法?
  • 对不起,由于一些假期,我无法访问 Skype,我还需要重置密码:P。您对直接在wp-content/plugins/woocommerce-bookings/includes/emails/class-wc-email-new-booking.php 中修改$this-&gt;recipient = $this-&gt;get_option( 'recipient', get_option( 'admin_email' ) ); 并通过供应商电子邮件有什么看法,我认为它会起作用。
  • 我接受答案没有问题,(也许)这又是 stackoverflow 政策,因为这对问题不起作用。因此,它可能会误导未来的用户。而且我没有使用它,因为在下订单时会调用上面的钩子,而我需要调用新的预订。所以,我尝试了预订挂钩,但它引发了错误。可能是因为它需要订单创建数据,如订单日期等,这些数据是在创建实际订单后生成的。我尝试做的方法不是正确的方法,所以一些专家建议;不要那样做,所以我只是发布了该代码作为参考,以表明我尝试过
猜你喜欢
  • 2023-03-23
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2020-10-28
  • 2018-02-22
  • 2022-06-11
相关资源
最近更新 更多