如何实现WooCommerce多供应商订单商品分组与金额统计

来源:APP编程网作者:上海SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何实现WooCommerce多供应商订单商品分组与金额统计》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何实现WooCommerce多供应商订单商品分组与金额统计》有用,将其分享出去将是对创作者最好的鼓励。

在WooCommerce多供应商商城场景中,用户下单后订单可能包含多个不同供应商的商品,运营和结算环节需要按供应商维度拆分订单商品,同时统计每个供应商的商品总金额,本文就介绍具体的实现方法。

如何实现WooCommerce多供应商订单商品分组与金额统计

核心实现思路

实现多供应商订单商品分组与金额统计,核心逻辑分为三步:首先从订单对象中获取所有商品项,然后提取每个商品项对应的供应商信息,最后按照供应商ID对商品分组并计算总金额。WooCommerce的订单商品项默认会存储商品的关联信息,多供应商插件通常会在商品或商品项中添加供应商ID的自定义字段,我们可以通过这些字段获取供应商标识。

获取订单商品项

WooCommerce的WC_Order对象提供了get_items方法获取订单中的所有商品项,每个商品项是WC_Order_Item_Product类型的对象,我们可以通过这个对象获取商品ID、数量、单价等信息。

以下是获取订单所有商品项的基础代码:

<?php
// 假设$order_id是目标订单的ID
$order = wc_get_order($order_id);
if (!$order) {
    return;
}
// 获取订单所有商品项
$order_items = $order->get_items();
foreach ($order_items as $item_id => $item) {
    // 商品项对象
    $product = $item->get_product();
    // 商品数量
    $quantity = $item->get_quantity();
    // 商品单价(含税费等,根据需求调整)
    $item_total = $item->get_total();
}
?>

按供应商分组商品

多供应商插件通常会在商品后台添加供应商选择的自定义字段,比如在商品编辑页添加名为_vendor_id的自定义字段存储供应商ID,我们可以通过get_post_meta获取商品的供应商ID,然后按照这个ID对商品项分组。

以下是分组的核心代码:

<?php
$vendor_groups = [];
foreach ($order_items as $item_id => $item) {
    $product = $item->get_product();
    if (!$product) {
        continue;
    }
    // 获取商品对应的供应商ID,根据实际插件字段名调整
    $vendor_id = get_post_meta($product->get_id(), '_vendor_id', true);
    // 如果没有供应商ID,归为平台自营
    if (empty($vendor_id)) {
        $vendor_id = 0;
    }
    // 初始化供应商分组
    if (!isset($vendor_groups[$vendor_id])) {
        $vendor_groups[$vendor_id] = [
            'items' => [],
            'total_amount' => 0
        ];
    }
    // 将商品项加入对应供应商分组
    $vendor_groups[$vendor_id]['items'][] = $item;
    // 累加该商品项的金额到供应商总金额
    $vendor_groups[$vendor_id]['total_amount'] += $item->get_total();
}
?>

统计各供应商金额

上一步的分组逻辑中已经同步计算了每个供应商的商品总金额,我们还可以进一步扩展,统计每个供应商的商品数量、税费等更多信息,以下是完整的统计输出示例:

<?php
// 遍历分组结果输出统计信息
foreach ($vendor_groups as $vendor_id => $group) {
    $vendor_name = $vendor_id > 0 ? get_userdata($vendor_id)->display_name : '平台自营';
    $item_count = count($group['items']);
    $total_amount = $group['total_amount'];
    echo "供应商:{$vendor_name},商品数量:{$item_count},总金额:{$total_amount}元<br/>";
    // 输出该供应商下的所有商品
    foreach ($group['items'] as $item) {
        $product_name = $item->get_name();
        $quantity = $item->get_quantity();
        echo "-- 商品名称:{$product_name},数量:{$quantity}<br/>";
    }
}
?>

注意事项

  • 不同多供应商插件的供应商ID存储位置可能不同,比如有的插件会把供应商ID存在商品项(order item)的自定义字段中,此时需要用$item->get_meta('_vendor_id')获取,而不是从商品post meta获取,需要根据实际使用的插件调整获取逻辑。
  • 金额统计时如果需要包含税费、运费等,需要额外获取订单的税费、配送费用,按照结算规则分摊到对应供应商,上述示例仅统计了商品项本身的总金额。
  • 如果订单支持退款,还需要考虑部分退款的场景,统计时排除已退款的商品金额,避免结算错误。

封装为可复用函数

为了方便在多个场景使用,我们可以把上述逻辑封装为一个独立的函数,接收订单ID作为参数,返回分组后的统计结果:

<?php
function get_vendor_order_groups($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) {
        return [];
    }
    $order_items = $order->get_items();
    $vendor_groups = [];
    foreach ($order_items as $item_id => $item) {
        $product = $item->get_product();
        if (!$product) {
            continue;
        }
        // 根据实际场景调整供应商ID获取方式
        $vendor_id = get_post_meta($product->get_id(), '_vendor_id', true);
        $vendor_id = empty($vendor_id) ? 0 : intval($vendor_id);
        if (!isset($vendor_groups[$vendor_id])) {
            $vendor_groups[$vendor_id] = [
                'vendor_id' => $vendor_id,
                'items' => [],
                'total_amount' => 0,
                'item_count' => 0
            ];
        }
        $vendor_groups[$vendor_id]['items'][] = $item;
        $vendor_groups[$vendor_id]['total_amount'] += $item->get_total();
        $vendor_groups[$vendor_id]['item_count'] += $item->get_quantity();
    }
    return $vendor_groups;
}
?>

调用这个函数就可以快速获取任意订单的供应商分组和金额统计结果,直接用于结算、报表等场景。

WooCommerce多供应商订单商品分组金额统计WordPress修改时间:2026-07-10 21:12:39

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。