如何根据ACF字段选择结果为WooCommerce添加固定结算费用
功能实现方案
你可以通过WooCommerce原生钩子结合ACF字段取值来实现该需求,操作步骤如下:
- 第一步先在ACF字段管理后台开启「显示字段键」配置,记录你两个自定义字段对应的字段键(格式为
field_xxxxxx),后续代码需要替换为你实际的字段键。 - 把以下PHP代码添加到当前WordPress主题的
functions.php文件,或者自定义功能插件的代码文件中:
add_action('woocommerce_cart_calculate_fees', 'add_office1_night_surcharge', 10, 1); function add_office1_night_surcharge($cart) { // 跳过后台非AJAX请求 if (is_admin() && !defined('DOING_AJAX')) { return; } // 替换为你Office选择字段的实际字段键 $selected_office = isset($_POST['acf']['field_替换为Office字段键']) ? sanitize_text_field($_POST['acf']['field_替换为Office字段键']) : ''; // 替换为你时间段选择字段的实际字段键 $selected_time = isset($_POST['acf']['field_替换为时间段字段键']) ? sanitize_text_field($_POST['acf']['field_替换为时间段字段键']) : ''; // 条件匹配时添加固定费用,示例费用为25元,可自行修改金额、费用名称 if ($selected_office === 'Office 1' && $selected_time === '00:00 - 07:00') { $cart->add_fee('凌晨时段附加费', 25, false); } }
- 若需要用户修改选项后结算费用实时更新,添加以下JS代码到主题的自定义JS文件中:
jQuery(document).ready(function($){ // 替换为你两个ACF字段对应的表单选择器 $('select[name="acf[field_替换为Office字段键]"], select[name="acf[field_替换为时间段字段键]"]').on('change', function(){ // 触发WooCommerce结算信息更新 $(document.body).trigger('update_checkout'); }); });
- 如果你已经提前将用户的选择存储到WooCommerce会话中,可直接将PHP代码中的取值逻辑替换为
WC()->session->get('你存储的键名')即可,无需从POST请求读取参数。
内容的提问来源于stack exchange,提问作者shadow_hunter104
相关产品推荐
相关产品推荐

