You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中用add_filter重写GamiPress的$points_to_award值?

解决GamiPress WooCommerce积分计算重写问题

你的代码无法正常工作主要有以下几个问题:

  • 没有接收过滤器传递的全部参数,导致无法获取订单ID等关键数据
  • 直接使用未定义的$order和$ratio变量
  • 未指定过滤器的参数数量,导致额外参数无法传递到自定义函数

修正后的代码如下:

function my_custom_function($points_to_award, $user_id, $points_type, $order_id, $percent) {
    // 获取WooCommerce订单对象
    $order = wc_get_order($order_id);
    
    // 检查订单是否有效
    if (!$order) {
        return $points_to_award;
    }
    
    // 定义积分比例(这里替换成你需要的比例值,比如10代表10%)
    $ratio = 10;
    
    // 计算实际要发放的积分:(订单总额 - 运费) * 比例/100,最后转成整数
    $points_to_award = (int) (($order->get_total() - $order->get_shipping_total()) * ($ratio / 100));
    
    return $points_to_award;
}
// 最后一个参数5表示接收5个额外参数(加上第一个共6个,对应原过滤器的参数数量)
add_filter( 'gamipress_wc_points_per_purchase_total_points_to_award', 'my_custom_function', 10, 5 );

关键修改说明:

  1. 补全函数参数:将原函数的单个参数扩展为过滤器传递的全部参数,这样能获取到$order_id来调取订单对象
  2. 获取订单对象:使用wc_get_order($order_id)获取合法的WooCommerce订单对象,避免直接使用未定义的$order
  3. 定义积分比例:明确赋值$ratio变量,替换成你实际需要的积分比例
  4. 指定过滤器参数数量:在add_filter的第四个参数传入5,告诉WordPress这个自定义函数需要接收5个额外参数(加上默认的第一个参数,总共6个,和原apply_filters的参数数量匹配)
  5. 强制转成整数:和原插件的处理逻辑一致,将计算结果转为整数,避免非整数积分的问题

内容的提问来源于stack exchange,提问作者Artan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:40:27