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

CSV更新WooCommerce库存时,同SKU前缀变体同步代码失效如何修复

WooCommerce CSV导入同步副本商品问题修复方案

你的代码能找到副本商品但无法生效,核心问题出在SKU逻辑错误和对象处理冗余,以下是具体修改点和修正后的代码:

主要问题分析

  1. SKU获取错误:导入变体时,你错误获取了父商品的SKU,而非当前变体的SKU,导致无法匹配副本中对应的变体(副本变体SKU是主变体SKU加后缀)。
  2. 冗余对象实例化:重复创建$pr对象,而传入的$object已经是当前导入的商品/变体对象,直接使用即可避免状态不一致。
  3. 缺失库存状态同步:仅更新库存数量但未同步状态,可能导致前端显示与实际库存不符。
  4. 查询条件不严谨:未限定商品发布状态,可能处理草稿或已删除的无效商品。

修正后的代码

function update_imported_product($object, $data)
{
    // 仅处理可变商品和变体
    if (!in_array($object->get_type(), ['variable', 'variation'])) {
        return $object;
    }

    $current_sku = $object->get_sku();
    // 无SKU的商品直接跳过
    if (empty($current_sku)) {
        return $object;
    }

    $product_id = $object->get_type() === 'variation' ? wp_get_post_parent_id($object->get_id()) : $object->get_id();
    $tri_produits = get_post_meta($product_id, 'tri_produits', true);

    if (empty($tri_produits)) {
        return $object;
    }

    // 查询所有同组的已发布商品
    $args = array(
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'meta_query'     => array(
            array(
                'key'   => 'tri_produits',
                'value' => $tri_produits,
            )
        ),
        'posts_per_page' => -1,
    );
    $products = get_posts($args);

    if (empty($products) || count($products) <= 1) {
        return $object;
    }

    foreach ($products as $product) {
        // 跳过当前导入的商品
        if ($product->ID === $product_id) {
            continue;
        }

        // 获取副本商品的所有变体
        $product_variations = get_posts([
            'post_type'      => 'product_variation',
            'posts_per_page' => -1,
            'fields'         => 'ids',
            'post_parent'    => $product->ID,
            'post_status'    => 'publish',
        ]);

        if (empty($product_variations)) {
            continue;
        }

        foreach ($product_variations as $variation_id) {
            $variation_sku = get_post_meta($variation_id, '_sku', true);
            // 匹配副本变体SKU:主SKU+_/-后缀
            if (str_starts_with($variation_sku, $current_sku . '_') || str_starts_with($variation_sku, $current_sku . '-')) {
                $target_variation = new WC_Product_Variation($variation_id);

                // 同步库存数量与状态
                $stock_qty = $object->get_stock_quantity();
                $target_variation->set_stock_quantity($stock_qty);
                $target_variation->set_stock_status($stock_qty > 0 ? 'instock' : 'outofstock');

                // 同步重量与常规价格
                $target_variation->set_weight($object->get_weight());
                $target_variation->set_regular_price($object->get_regular_price());

                // 保存修改
                $target_variation->save();
            }
        }
    }

    return $object;
}
add_action('woocommerce_product_import_inserted_product_object', 'update_imported_product', 10, 2);

额外说明

  • 建议CSV导入时直接针对变体SKU更新,因为可变父商品通常不会设置SKU,匹配更准确。
  • 若需支持父商品导入时同步所有变体,可添加遍历父商品变体的逻辑,针对每个变体单独处理匹配。

内容的提问来源于stack exchange,提问作者JulienVan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:01:16