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

如何无需点击保存按钮批量更新WooCommerce现有产品重量值

批量更新符合条件的WooCommerce产品重量(仅运行一次)

问题分析

你当前的代码仅在单个产品后台保存时触发重量更新,无法批量处理现有产品;直接调用do_action('update_product_weight_from_dimensions', 10, 1)无效,因为该函数是woocommerce_admin_process_product_object的回调函数,并非独立可触发的Action钩子。

解决方案:一次性批量更新脚本

以下代码会查询所有WooCommerce产品,逐个检查条件,符合要求的产品直接更新重量并保存,仅需运行一次,执行完成后务必删除或注释这段代码:

function bulk_update_product_weights() {
    // 查询所有已发布的产品,可根据需求调整参数
    $products = wc_get_products(array(
        'status' => 'publish',
        'limit' => -1, // 不限数量,产品过多时建议改为分批处理
        'type' => array('simple', 'variable'), // 可按需指定产品类型
    ));

    foreach ($products as $product) {
        $squared_dimensions = $product->get_length() * $product->get_width();
        $synthetic_product = $product->get_attribute('pa_composition');

        // 匹配条件则更新重量
        if ($squared_dimensions <= 2.8 && $synthetic_product == 'steel') {
            $product->set_weight(3);
            $product->save(); // 必须调用save()才能持久化更新
        }
    }

    // 可选:运行后弹出完成提示,确认后删除该函数
    // wp_die('批量更新完成,请立即删除此函数代码');
}

// 绑定到init钩子,访问网站任意页面即可触发执行
add_action('init', 'bulk_update_product_weights');

使用步骤

  1. 将上述代码添加到WordPress主题的functions.php文件,或通过代码片段插件(如Code Snippets)添加。
  2. 访问网站任意前端页面或后台页面一次,脚本会自动执行批量更新。
  3. 执行完成后,立即删除或注释这段代码,避免每次访问都重复运行。

注意事项

  • 备份数据库:操作前建议备份产品数据,防止意外错误导致数据丢失。
  • 大数量产品分批处理:如果店铺产品超过1000个,直接用limit => -1可能触发超时,可修改为分批查询:
    $page = 1;
    $per_page = 100; // 每页处理100个产品
    do {
        $products = wc_get_products(array(
            'status' => 'publish',
            'limit' => $per_page,
            'paged' => $page,
            'type' => array('simple', 'variable'),
        ));
        if (empty($products)) break;
    
        foreach ($products as $product) {
            // 同上的条件检查与更新逻辑
        }
        $page++;
    } while (true);
    
  • 可变产品变体处理:若需要处理可变产品的子变体,需额外循环变体:
    if ($product->is_type('variable')) {
        foreach ($product->get_children() as $variation_id) {
            $variation = wc_get_product($variation_id);
            $squared_dimensions = $variation->get_length() * $variation->get_width();
            $synthetic_product = $variation->get_attribute('pa_composition');
            if ($squared_dimensions <= 2.8 && $synthetic_product == 'steel') {
                $variation->set_weight(3);
                $variation->save();
            }
        }
    } else {
        // 简单产品的更新逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:30:47