我没有也从未使用过 WC Vendors 插件,因为这是一个非官方商业插件(不是自动制作的)。
要获取供应商 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}
where $this->id
是通知类型的 ID,对于new_booking
电子邮件 ID(也用于测试new_order
电子邮件 ID 也)。
这将允许您添加其他电子邮件收件人。
在电子邮件通知挂钩中,几乎总是定义 Order 对象。由于在一个订单中您可以拥有许多商品(来自不同供应商的不同产品),因此您需要从每个商品获取供应商 ID。
在下面的代码中,我将供应商电子邮件的收件人添加到new_booking
and 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 文件中或任何插件文件中。
这应该可以正常工作,不会出现错误。