如何通过代码批量更新WooCommerce变体商品价格(乘以1.45)
解决WooCommerce变体商品价格无法按比例调整的问题
我来帮你搞定这个问题!你的原代码只处理了简单商品的价格,原因有两个:一是你用的woocommerce_get_price钩子对变体商品不生效;二是代码里还有个小bug——你先调用了wc_get_product($post_id)但$post_id还没定义,这会导致不必要的错误。
下面是修正后的代码,既能处理简单商品,也能完美调整变体商品的价格:
function adjust_product_price($price, $product) { // 只针对简单商品、可变商品父项和变体商品生效 if (in_array($product->get_type(), array('simple', 'variable', 'variation'))) { $price = $price * 1.45; } return $price; } // 处理简单商品和可变商品的基础价格 add_filter('woocommerce_product_get_price', 'adjust_product_price', 10, 2); // 专门处理变体商品的价格 add_filter('woocommerce_product_variation_get_price', 'adjust_product_price', 10, 2);
代码说明:
- 钩子选择:我用了WooCommerce官方推荐的
woocommerce_product_get_price和woocommerce_product_variation_get_price钩子,这两个钩子分别对应普通商品和变体商品,比旧的woocommerce_get_price兼容性更好,适配最新版本的WooCommerce。 - 去掉冗余全局变量:直接使用钩子传入的
$price和$product参数,不需要调用全局$post,代码更简洁安全。 - 产品类型过滤:添加了商品类型判断,确保只调整我们需要的商品价格,避免意外影响运费、税费等其他价格场景。
如果你的商品还有销售价需要同步调整,可以再加上这两个钩子:
add_filter('woocommerce_product_get_sale_price', 'adjust_product_price', 10, 2); add_filter('woocommerce_product_variation_get_sale_price', 'adjust_product_price', 10, 2);
内容的提问来源于stack exchange,提问作者kongen
相关产品推荐
相关产品推荐

