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

如何在WooCommerce商品分类中为分类下所有产品设置额外成本

WooCommerce分类统一添加额外成本解决方案

总共分为插件方案和轻量自定义代码方案两类,都可以实现直接修改商品基础售价、不在购物车阶段加价的需求:

1. 插件方案

  • 可选择支持分类全局定价调整的WooCommerce定价插件,配置路径一般为「产品分类编辑页→全局定价规则」,可设置固定金额额外成本或百分比额外成本,保存规则后会自动同步到分类下所有商品的售价字段,不会仅在购物车结算时临时加价。
  • 注意如果有促销价需求,要确认插件支持同时调整常规售价和促销售价的规则配置。

2. 自定义代码方案

无需安装额外插件,直接将以下代码添加到当前主题的functions.php文件或者自定义功能插件中即可:

第一步:添加分类编辑页Metabox及字段保存逻辑

// 给产品分类添加额外成本字段
add_action('product_cat_add_form_fields', 'wc_add_category_extra_cost_field', 10, 1);
add_action('product_cat_edit_form_fields', 'wc_edit_category_extra_cost_field', 10, 1);
function wc_add_category_extra_cost_field() {
    ?>
    <div class="form-field">
        <label for="extra_cost"><?php _e('额外成本', 'woocommerce'); ?></label>
        <input type="number" step="0.01" name="extra_cost" id="extra_cost" value="">
        <p class="description"><?php _e('填写该分类下所有商品统一增加的固定成本金额', 'woocommerce'); ?></p>
    </div>
    <?php
}
function wc_edit_category_extra_cost_field($term) {
    $extra_cost = get_term_meta($term->term_id, 'extra_cost', true);
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="extra_cost"><?php _e('额外成本', 'woocommerce'); ?></label></th>
        <td>
            <input type="number" step="0.01" name="extra_cost" id="extra_cost" value="<?php echo esc_attr($extra_cost); ?>">
            <p class="description"><?php _e('填写该分类下所有商品统一增加的固定成本金额', 'woocommerce'); ?></p>
        </td>
    </tr>
    <?php
}

// 保存分类额外成本字段
add_action('created_product_cat', 'wc_save_category_extra_cost', 10, 1);
add_action('edited_product_cat', 'wc_save_category_extra_cost', 10, 1);
function wc_save_category_extra_cost($term_id) {
    if (isset($_POST['extra_cost'])) {
        update_term_meta($term_id, 'extra_cost', wc_clean($_POST['extra_cost']));
        
        // 可选:保存分类时批量更新分类下所有产品的售价(固化到产品meta)
        $args = array(
            'post_type' => 'product',
            'posts_per_page' => -1,
            'tax_query' => array(
                array(
                    'taxonomy' => 'product_cat',
                    'field' => 'term_id',
                    'terms' => $term_id,
                )
            )
        );
        $products = get_posts($args);
        foreach ($products as $product) {
            $base_price = get_post_meta($product->ID, '_regular_price', true);
            $new_price = $base_price + $_POST['extra_cost'];
            update_post_meta($product->ID, '_price', $new_price);
            update_post_meta($product->ID, '_regular_price', $new_price);
        }
    }
}

第二步:动态渲染产品售价(无需固化价格可选)

如果你不需要把额外成本固化到产品售价字段,只需要前端和接口读取价格时自动叠加,可添加以下钩子代码:

add_filter('woocommerce_get_price', 'wc_add_extra_cost_to_product_price', 10, 2);
add_filter('woocommerce_get_regular_price', 'wc_add_extra_cost_to_product_price', 10, 2);
add_filter('woocommerce_get_sale_price', 'wc_add_extra_cost_to_product_price', 10, 2);
function wc_add_extra_cost_to_product_price($price, $product) {
    $terms = get_the_terms($product->get_id(), 'product_cat');
    if ($terms && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            $extra_cost = get_term_meta($term->term_id, 'extra_cost', true);
            if ($extra_cost) {
                $price += floatval($extra_cost);
                // 产品属于多个分类时只取第一个有额外成本的分类,避免重复加价
                break;
            }
        }
    }
    return $price;
}

注意事项

  • 如果产品同时归属多个分类,可自行调整代码逻辑取最高/最低额外成本,或者指定分类优先级避免重复加价
  • 调整额外成本后如果站点开启了页面缓存、对象缓存,需要清空缓存后前端价格才会更新
  • 以上代码默认仅处理简单产品,若要适配可变产品,需要额外追加变体价格的过滤钩子即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:45:00