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

WordPress中CF7表单提交后无法添加MyCred积分求助

问题排查与修正方案

核心问题:钩子参数不匹配

你的代码出现页面加载异常、积分无法添加的根本原因是CF7钩子的参数声明错误:

  • wpcf7_mail_sent钩子仅传递$contact_form一个参数,你却在函数里声明了两个参数,导致$submission变量为null。调用$submission->get_posted_data()会触发致命PHP错误,中断后续流程,造成页面持续加载,同时积分添加逻辑完全无法执行(但邮件已在钩子触发前发送完成,所以邮件能正常收到)。
  • 换成wpcf7_before_send_mail钩子后,该钩子的参数是$contact_form和$abort,你仍将第二个参数当作$submission,同样导致$submission为null并触发错误,直接中断邮件发送流程,最终邮件发不出、页面也卡住。

修正后的代码

以下是修复参数问题、增加数据验证的完整代码:

function addcredits_withform( $contact_form ){
    // 获取CF7提交实例
    $submission = WPCF7_Submission::get_instance();
    if ( ! $submission ) {
        return;
    }

    // 获取表单提交数据
    $posted_data = $submission->get_posted_data();
    $requesting_userid = isset( $posted_data['submitted_userid'] ) ? intval( $posted_data['submitted_userid'] ) : 0;
    $requested_amount = isset( $posted_data['number-805'] ) ? floatval( $posted_data['number-805'] ) : 0;

    // 验证关键数据有效性
    if ( ! $requesting_userid || ! is_numeric( $requested_amount ) || $requested_amount <= 0 ) {
        return;
    }

    // 验证用户是否存在
    if ( ! get_user_by( 'id', $requesting_userid ) ) {
        return;
    }

    // 执行积分添加
    mycred_add(
        'addcredits_withform',
        $requesting_userid,
        $requested_amount,
        '用户通过表单添加积分'
    );
}

add_action( 'wpcf7_mail_sent', 'addcredits_withform' );

额外排查步骤

  1. 核对表单字段名:确保CF7表单中字段的name属性与代码中submitted_userid、number-805完全一致(比如表单代码是[text submitted_userid]、[number number-805])。
  2. 开启错误日志:在wp-config.php中开启WP_DEBUG和WP_DEBUG_LOG,查看wp-content/debug.log中的具体错误信息,辅助排查潜在问题。
  3. 检查mycred设置:确认mycred插件允许手动添加积分,且日志类型addcredits_withform已在mycred设置中启用(若需要自定义日志类型)。
  4. 权限验证:如果是前台用户提交表单,需确保提交的submitted_userid是当前登录用户ID(可改用get_current_user_id()替代表单提交的用户ID,防止恶意篡改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:51:52