如何通过$order_id获取WooCommerce供应商邮箱地址(YITH多供应商插件)
WooCommerce新订单供应商邮件通知优化方案
问题描述
我开发了一个自定义插件,用于在WooCommerce收到新订单时向供应商发送邮件,当前使用YITH WooCommerce Multi Vendor / Marketplace插件管理供应商。现有代码可正常运行,但供应商邮箱是硬编码的,希望通过订单ID自动获取对应供应商的邮箱地址,询问是否可以用yith_get_vendor实现,有没有更简便的方法。
现有代码:
function send_vendor_notification( $order_id ) { $order = wc_get_order( $order_id ); $items = $order->get_items(); foreach ( $items as $item ) { $product_name = $item['name']; $product_id = $item['product_id']; $product_variation_id = $item['variation_id']; } $vendor_email = "dilshanudawatta15@gmail.com"; $subject = 'New Order Received'; $message = 'You have received a new order (#' . $order_id . '). Product Name : (#' . $product_name . ') Product ID : (#'. $product_id .').'; wp_mail( $vendor_email, $subject, $message ); } add_action( 'woocommerce_thankyou', 'send_vendor_notification' );
解决方案
完全可以使用YITH官方提供的yith_get_vendor()函数来实现,这也是最简便可靠的方法——直接调用插件原生API获取供应商信息,避免自行查询数据库导致的兼容性问题。
优化后的代码
考虑到一个订单可能包含多个不同供应商的商品,以下代码会自动归类同一供应商的商品,避免重复发送邮件:
function send_vendor_notification( $order_id ) { $order = wc_get_order( $order_id ); if ( ! $order ) return; $vendors = array(); // 存储不同供应商的信息,避免重复发信 foreach ( $order->get_items() as $item ) { $product_id = $item->get_product_id(); // 通过商品ID获取对应的供应商对象 $vendor = yith_get_vendor( $product_id, 'product' ); // 确认是有效供应商 if ( $vendor && $vendor->is_valid() ) { $vendor_id = $vendor->id; // 初始化该供应商的信息容器 if ( ! isset( $vendors[ $vendor_id ] ) ) { $vendors[ $vendor_id ] = array( 'email' => $vendor->email, 'items' => array() ); } // 将当前商品添加到对应供应商的商品列表 $vendors[ $vendor_id ]['items'][] = array( 'name' => $item->get_name(), 'id' => $product_id ); } } // 遍历每个供应商发送邮件 foreach ( $vendors as $vendor_data ) { $subject = '新订单通知 (订单#' . $order_id . ')'; // 构建商品列表内容 $items_list = ''; foreach ( $vendor_data['items'] as $item ) { $items_list .= '- 商品名称:' . $item['name'] . ',商品ID:#' . $item['id'] . "\n"; } $message = '您收到了一个新订单(订单#' . $order_id . '),包含以下商品:' . "\n\n" . $items_list; wp_mail( $vendor_data['email'], $subject, $message ); } } add_action( 'woocommerce_thankyou', 'send_vendor_notification' );
关键说明
yith_get_vendor( $product_id, 'product' ):第二个参数'product'指定按商品关联关系查询供应商,确保获取到正确的商品所属供应商$vendor->is_valid():过滤无效的供应商记录,避免发送邮件失败- 按供应商ID归类商品:同一个供应商只会收到一封邮件,邮件内列出该供应商的所有订单商品,提升体验
- 使用WooCommerce的
get_product_id()、get_name()等方法替代直接数组取值,符合最新的代码规范
内容的提问来源于stack exchange,提问作者Dilshan Udawaththa
相关产品推荐
相关产品推荐

