mycred插件积分同步自定义插件报错:参数数量不足求助
解决myCRED积分同步到自定义数据库表的参数错误问题
错误原因
你遇到的ArgumentCountError是因为mycred_add钩子实际只传递3个参数,但你的函数声明了4个参数,导致参数不匹配。从错误栈可以看到,钩子调用时传递的是true(积分变动审批状态)、Array(积分变动日志条目)、myCRED_Settings对象,共3个参数。
修正后的代码
// Hook into myCRED points update event add_action('mycred_add', 'update_plugin_points_on_mycred_award', 10, 3); function update_plugin_points_on_mycred_award($approved, $log_entry, $mycred) { // 仅处理已通过的阅读内容积分变动 if ($approved && $log_entry['ref'] === 'view_content') { $user_id = $log_entry['user_id']; // 获取用户当前的myCRED总余额 $current_balance = $mycred->get_users_balance($user_id); if ($user_id) { update_user_points_in_plugin($user_id, $current_balance); } } } // 更新自定义插件数据库中的积分 function update_user_points_in_plugin($user_id, $points) { global $wpdb; $table_name = $wpdb->prefix . 'wallets'; // 先检查用户记录是否存在,不存在则插入新记录 $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE user_id = %d", $user_id)); if ($exists) { $wpdb->update( $table_name, array('points' => $points), array('user_id' => $user_id), array('%d'), array('%d') ); } else { $wpdb->insert( $table_name, array('user_id' => $user_id, 'points' => $points), array('%d', '%d') ); } }
关键改动说明
- 匹配钩子参数数量:将
add_action的参数接收数量从4改为3,函数参数列表同步调整为$approved、$log_entry、$mycred,和钩子实际传递的参数对应。 - 精准获取用户ID:从
$log_entry['user_id']直接获取变动积分的用户ID,替代get_current_user_id(),避免后台操作或特殊场景下的用户ID错误。 - 获取最新余额:通过
$mycred->get_users_balance()获取用户当前的myCRED总余额,确保同步到自定义表的是最新积分数值。 - 兼容无记录场景:增加用户记录存在性检查,若自定义表中无该用户记录则插入新数据,避免更新操作失败。
内容的提问来源于stack exchange,提问作者Gabriella
相关产品推荐
相关产品推荐

