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

WooCommerce中产品属性附加价格的设置与显示问题咨询

解决WooCommerce变体属性附加价格的问题

我来帮你搞定这个需求!要给特定属性选项(比如黑色)加30€附加费,同时在前端清晰显示这个额外费用,咱们可以用两种方式实现——自定义代码(免费灵活)或者专用插件(省心)。

方法一:自定义代码实现(无需插件)

这个方案适合有一点代码基础的朋友,完全免费且可控性强。

1. 给属性选项添加附加价格字段

首先咱们要在产品编辑页的属性设置里,给每个颜色选项加一个输入附加费的字段。把下面的代码加到你的主题functions.php文件里,或者用「Code Snippets」这类代码片段插件来添加:

// 在产品属性选项后添加附加价格字段
add_action('woocommerce_product_after_attribute_settings', 'add_attribute_option_surcharge_field', 10, 3);
function add_attribute_option_surcharge_field($loop, $attribute, $variation) {
    // 只针对颜色属性(这里替换成你的属性slug,比如'pa_color')
    if ($attribute->get_name() === 'pa_color') {
        woocommerce_wp_text_input([
            'id' => 'attribute_surcharge[' . $loop . ']',
            'label' => __('附加价格', 'woocommerce'),
            'type' => 'number',
            'custom_attributes' => [
                'step' => '0.01',
                'min' => '0'
            ],
            'value' => get_post_meta($variation->get_id(), '_attribute_surcharge', true)
        ]);
    }
}

// 保存附加价格字段的值
add_action('woocommerce_admin_process_product_object', 'save_attribute_option_surcharge_field');
function save_attribute_option_surcharge_field($product) {
    if (isset($_POST['attribute_surcharge'])) {
        foreach ($_POST['attribute_surcharge'] as $variation_id => $surcharge) {
            $variation = wc_get_product($variation_id);
            if ($variation) {
                update_post_meta($variation_id, '_attribute_surcharge', sanitize_text_field($surcharge));
            }
        }
    }
}

注意:把代码里的pa_color换成你实际使用的颜色属性的slug(可以在WooCommerce→产品→属性里查看)。

2. 让附加价格自动加到变体总价里

接下来要实现价格计算逻辑,当用户选择带附加费的属性时,自动把附加费加到基础价格上:

// 调整变体价格,加上附加费
add_filter('woocommerce_variation_prices_price', 'add_attribute_surcharge_to_variation_price', 10, 3);
add_filter('woocommerce_variation_prices_regular_price', 'add_attribute_surcharge_to_variation_price', 10, 3);
function add_attribute_surcharge_to_variation_price($price, $variation, $product) {
    $surcharge = get_post_meta($variation->get_id(), '_attribute_surcharge', true);
    if ($surcharge && is_numeric($surcharge)) {
        $price += floatval($surcharge);
    }
    return $price;
}

// 清除WooCommerce价格缓存(避免价格不更新)
add_action('woocommerce_update_product', 'clear_variation_price_cache');
function clear_variation_price_cache($product_id) {
    wc_delete_product_transients($product_id);
}

3. 在前端选项中显示附加费提示

最后要让用户在选颜色的时候看到附加费,比如显示成「黑色 (+30€)」:

// 在变体选项名称后附加价格提示
add_filter('woocommerce_variation_option_name', 'display_attribute_surcharge_in_option', 10, 4);
function display_attribute_surcharge_in_option($option_name, $product, $attribute, $term) {
    // 只针对颜色属性
    if ($attribute->get_name() === 'pa_color') {
        // 找到对应变体的附加费
        $variations = $product->get_available_variations();
        foreach ($variations as $variation) {
            if ($variation['attributes']['attribute_' . $attribute->get_name()] === $term->slug) {
                $surcharge = get_post_meta($variation['variation_id'], '_attribute_surcharge', true);
                if ($surcharge && floatval($surcharge) > 0) {
                    $option_name .= ' (+' . wc_price($surcharge) . ')';
                }
                break;
            }
        }
    }
    return $option_name;
}

把这三段代码都加上后,回到产品编辑页,找到颜色属性的变体设置,就能看到每个选项的附加价格输入框了——给黑色输入30,红色留空即可。前端下拉选项会自动显示附加费,结算时价格也会自动加上30€。

方法二:用专用插件实现(无需代码)

如果不想折腾代码,可以用WooCommerce的专用变体定价插件,比如「WooCommerce Variation Prices」或者「Advanced Product Fields for WooCommerce」这类插件。这些插件通常提供可视化的界面,让你直接给属性选项设置附加费,并且自动在前端显示提示,操作起来更省心,适合新手。

注意事项

  • 如果你用了缓存插件,修改代码后记得清除网站缓存和WooCommerce的产品缓存,确保价格及时更新。
  • 测试的时候要切换到前端,模拟用户选择变体,确认价格计算和显示都正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:47:49