You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:06:05