我正在与WC供应商和WC预订插件一起使用Woo Commerce。我想将预订通知发送给供应商。目前,它将通知发送给客户和管理员,以及管理员更改产品状态为处理&完成,然后将通知发送给供应商。但是,我想发送供应商通知以及管理通知。
i 尝试此钩子:
add_action( 'woocommerce_new_booking', 'new_order_email_to_vendor', 10, 4 );
function new_order_email_to_vendor( $order ){
$emails = WC()->mailer()->get_emails();
if ( ! empty( $emails ) ) {
$emails['WC_Product_Vendors_Order_Email_To_Vendor']->trigger( $order );
}
}
但它引发了一个错误:
Fatal error: Call to a member function get_date_created() on boolean in /wp-content/plugins/woocommerce-product-vendors/includes/emails/class-wc-product-vendors-order-email-to-vendor.php on line 56
所以,现在我试图将供应商与客户和管理员电子邮件直接挂钩, line :
$this->recipient = $this->get_option( 'recipient', get_option( 'admin_email' ), 'WILL ADD VENDOR EMAIL HERE' );
in 文件:
wp-content/plugins/woocommerce-bookings/includes/emails/class-wc-email-new-booking.php
在此阶段,我有可预订的产品ID可用,我正在尝试使用产品ID提取供应商信息,但没有找到任何信息。
i 尝试:
-
get_post()
-
get_post_meta()
-
get_post_meta_by_id()
问题是:如何使用产品ID获取供应商信息(特别是电子邮件)?
我没有,我从未使用过WC供应商插件,因为这是一个非官方商业插件(不是由自动制作)。
要获取供应商ID(稍后搜索后),您可以从产品ID中获得这种方式:
$vendor_id = get_post_field( 'post_author', $product_id );
现在您可以以这种方式收到供应商的电子邮件:
$vendor_id = get_post_field( 'post_author', $product_id );
$vendor = get_userdata( $vendor_id );
$email = $vendor->user_email;
可能是一个很好的转折:
您可以使用专用滤镜挂钩woocommerce_email_recipient_{$this->id}
,其中$this->id
是通知类型的ID,对于new_booking
电子邮件ID(也用于测试new_order
电子邮件ID)。
这将允许您添加其他电子邮件收件人。
在电子邮件通知挂钩中,几乎总是定义订单对象。就像按顺序一样,您可以拥有许多项目(不同的产品ROM不同的供应商),您需要从每个项目中获取供应商ID。
在下面的代码中,我将new_booking
和new_order
电子邮件通知的供应商添加到收件人中:
add_filter( 'woocommerce_email_recipient_new_booking', 'additional_customer_email_recipient', 10, 2 );
add_filter( 'woocommerce_email_recipient_new_order', 'additional_customer_email_recipient', 10, 2 ); // Optional (testing)
function additional_customer_email_recipient( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
$additional_recipients = array(); // Initializing…
// Iterating though each order item
foreach( $order->get_items() as $item_id => $line_item ){
// Get the vendor ID
$vendor_id = get_post_field( 'post_author', $line_item->get_product_id());
$vendor = get_userdata( $vendor_id );
$email = $vendor->user_email;
// Avoiding duplicates (if many items with many emails)
// or an existing email in the recipient
if( ! in_array( $email, $additional_recipients ) && strpos( $recipient, $email ) === false )
$additional_recipients[] = $email;
}
// Convert the array in a coma separated string
$additional_recipients = implode( ',', $additional_recipients);
// If an additional recipient exist, we add it
if( count($additional_recipients) > 0 )
$recipient .= ','.$additional_recipients;
return $recipient;
}
代码在您的活动子主题(或主题)或任何插件文件中的function.php文件中。
这应该在没有错误的情况下工作。