如何在WooCommerce中根据商品Size属性为每件商品收取对应费用?
如何在WooCommerce中根据商品Size属性为每件商品收取对应费用?
我来帮你搞定这个需求——根据商品的Size属性给每件商品加对应费用对吧?先看看你写的代码框架,我帮你补全并解释清楚怎么用:
首先是完整的可运行代码,你可以直接拿去用,按需调整参数就行:
add_action( 'woocommerce_cart_calculate_fees', 'wpf_wc_add_cart_fees_by_product_attribute' ); if ( ! function_exists( 'wpf_wc_add_cart_fees_by_product_attribute' ) ) { function wpf_wc_add_cart_fees_by_product_attribute( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 这里定义属性slug对应的单件费用,你可以按需修改金额和属性值 $fees = array( 'size_large' => 5.00, // 大码每件收5元(或美元,取决于你的店铺设置) 'size_medium' => 3.00, // 中码每件收3元 'size_small' => 1.00 // 小码每件收1元 ); $total_fee = 0; // 遍历购物车里的每一件商品 foreach ( $cart->get_cart() as $cart_item ) { $product = $cart_item['data']; // 获取商品的Size属性值(注意这里的属性slug要和你后台设置的一致) $size_attr = $product->get_attribute('size'); // 如果当前商品的尺码在我们定义的费用规则里,就累加费用 if ( array_key_exists( $size_attr, $fees ) ) { $total_fee += $fees[$size_attr] * $cart_item['quantity']; } } // 如果总附加费大于0,就添加到购物车结算项里 if ( $total_fee > 0 ) { $cart->add_fee( '尺码附加费', $total_fee ); } } }
接下来给你划几个关键注意点,避免踩坑:
- 钩子选对了:
woocommerce_cart_calculate_fees是WooCommerce官方推荐用来添加自定义费用的钩子,只会在计算购物车费用时触发,很安全。 - 后台判断:开头的
is_admin()判断是为了防止在WordPress后台操作时误触发这个函数,只有前端用户购物或者AJAX更新购物车时才会执行。 - 属性要匹配:你得确保代码里的
get_attribute('size')和你后台商品属性的slug完全一致!比如如果你的Size属性slug是product_size,就把这里改成get_attribute('product_size'),不然拿不到属性值。 - 费用规则自定义:
$fees数组里的键就是你商品Size属性的选项slug,值是单件对应的费用,你可以随便加更多尺码的规则,比如加个'size_xl' => 7.00这样的。 - 费用名称:
add_fee的第一个参数是显示给用户的费用名称,你可以改成更贴合店铺的,比如“大码服务费”之类的。
最后提醒下:这段代码可以添加到你当前主题的functions.php文件末尾,或者用专门的自定义代码插件(比如Code Snippets)来添加,千万别直接改WooCommerce的核心文件,不然下次插件更新你的代码就没了!
备注:内容来源于stack exchange,提问作者Navi
相关产品推荐
相关产品推荐

