在WooCommerce结账页基于单选按钮添加含缎带选项的动态条件费用
修改WooCommerce动态费用代码,添加“缎带”选项
没问题,我帮你调整LoicTheAztec的那段代码,新增第三个“缎带”选项的费用计算逻辑。下面是完整的修改后代码,关键部分我会给你说明:
// Add a custom dynamic packaging fee add_action( 'woocommerce_cart_calculate_fees', 'add_packaging_fee', 20, 1 ); function add_packaging_fee( $cart ) { // 跳过后台操作,只在前端和AJAX请求中生效 if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // 获取选中的包装选项(这里要和你 checkout 页面单选按钮的 name 对应) $selected_option = isset( $_POST['packaging_option'] ) ? sanitize_text_field( $_POST['packaging_option'] ) : ''; // 根据不同选项设置对应费用 switch( $selected_option ) { case 'regular': $fee_amount = 0; // 普通包装免费用 $fee_label = '普通包装'; break; case 'gift': $fee_amount = 5; // 礼品包装收5美元(可自行修改) $fee_label = '礼品包装'; break; case 'ribbon': // 新增的缎带选项 $fee_amount = 3; // 缎带收3美元(可自行修改) $fee_label = '缎带包装'; break; default: $fee_amount = 0; $fee_label = ''; break; } // 如果费用大于0,添加到购物车 if ( $fee_amount > 0 ) { $cart->add_fee( __($fee_label, 'woocommerce'), $fee_amount, false ); // 第三个参数设为 true 的话,费用会包含税费,根据你的需求调整 } }
关键说明:
- 确保你 checkout 页面的单选按钮
name属性是packaging_option,如果不是,把代码里的$_POST['packaging_option']改成你实际使用的名称。 - 费用金额可以随便调整,甚至可以改成基于购物车总价的百分比,比如把
$fee_amount = 3改成$fee_amount = $cart->subtotal * 0.02,就是按订单总价的2%收取缎带费用。 add_fee函数的第三个参数控制费用是否含税,默认false是不含税,改成true就会自动计算税费。- 如果你的选项是通过session存储的(有些场景下单选按钮值会存在session里),可以把获取值的部分改成
WC()->session->get('packaging_option'),确保在页面刷新后费用依然生效。
内容的提问来源于stack exchange,提问作者Omer Q
相关产品推荐
相关产品推荐

