如何将前端表单用户选择值传递给WP User Frontend Pro的$billing_amount变量
WordPress WPUF 动态修改投稿费实现方案
实现步骤
1. 前端表单配置
- 在WPUF创建的投稿表单中,添加你需要的单选/复选框选项,用于用户选择不同的服务等级/附加服务
- 额外添加一个隐藏字段,字段名可设为
custom_calc_fee,无需设置默认值 - 用JS监听单选/复选框的
change事件,根据用户选中的选项实时计算总金额,将计算结果写入上述隐藏字段的value属性即可
2. 后端接收并生效自定义金额
无需修改WPUF插件的原生代码,直接在当前主题的functions.php文件中添加以下代码即可,利用WPUF预留的过滤器动态修改计费金额:
add_filter('wpuf_payment_amount', 'custom_calculate_post_fee', 10, 1); function custom_calculate_post_fee($original_amount) { // 注意:禁止直接使用前端传的金额值,必须后端根据用户提交的选项重新计算,防止恶意篡改 $final_amount = 0; // 示例:根据前端提交的选项计算金额,需替换为你自己的选项对应规则 // 1. 计算基础投稿费(对应单选框post_level) if (isset($_POST['post_level']) && is_numeric($_POST['post_level'])) { $level_map = [ 1 => 10, // 普通投稿10元 2 => 20 // 优质投稿20元 ]; $level = intval($_POST['post_level']); if (!isset($level_map[$level])) { return $original_amount; // 选项非法返回默认金额 } $final_amount += $level_map[$level]; } // 2. 计算附加服务费(对应复选框extra_services) if (isset($_POST['extra_services']) && is_array($_POST['extra_services'])) { $service_map = [ 'urgent' => 5, // 加急审核加5元 'featured' => 15 // 首页推荐加15元 ]; foreach ($_POST['extra_services'] as $service) { if (isset($service_map[$service])) { $final_amount += $service_map[$service]; } } } // 金额校验合法则返回自定义金额,否则返回插件默认金额 return $final_amount > 0 ? $final_amount : $original_amount; }
3. 可选补充校验
如果需要额外保障支付安全,可以在PayPal IPN回调的钩子中再加一层金额校验,避免出现支付金额和订单金额不符的情况,WPUF对应的IPN处理钩子为wpuf_paypal_ipn_processed。
注意事项
- 所有金额计算逻辑必须放在后端执行,前端JS仅做展示用,不要直接信任前端传的数值,避免用户通过篡改JS代码提交异常金额
- 代码放在主题
functions.php中不会被WPUF插件更新覆盖,比修改插件原生代码兼容性更好
内容的提问来源于stack exchange,提问作者Tommaso Puccioni
相关产品推荐
相关产品推荐

