Learndash Enroll时重置课程/测验进度且保留证书记录的实现问询
LearnDash 用户重新报名课程时重置进度解决方案
核心依赖钩子与函数
- 报名触发钩子:
learndash_user_enrolled,用户成功报名课程后自动触发,无需额外判断报名状态 - 课程进度重置函数:
learndash_delete_user_course_progress($user_id, $course_id),仅清除用户对应课程的学习进度、节点完成标记、课程状态,不会操作历史证书数据 - 测验记录重置函数:
learndash_delete_quiz_attempts_for_user($user_id, $course_id),可选调用,用于清空用户对应课程下所有测验的作答、得分、尝试次数记录
可直接部署的实现代码
add_action( 'learndash_user_enrolled', 'reset_course_progress_on_re_enroll', 10, 3 ); function reset_course_progress_on_re_enroll( $user_id, $course_id, $access_expiry ) { // 仅当用户之前已完成过该课程时才执行重置,避免首次报名误清数据 $course_completed = learndash_is_course_complete( $user_id, $course_id ); if ( $course_completed ) { // 重置课程全量进度、完成状态 learndash_delete_user_course_progress( $user_id, $course_id ); // 可选:清空所有测验尝试记录,不需要可删除该行 learndash_delete_quiz_attempts_for_user( $user_id, $course_id ); } }
将上述代码添加到主题的functions.php文件或自定义功能插件中即可生效。
适配性说明
- 完全匹配业务需求:已生成的证书存储在独立的
sfwd-certificates自定义类型关联表中,上述重置逻辑不会触碰该表数据,所有历史过期完成记录都会完整留存 - 适配当前课程配置:免费非Open类型的课程过期逻辑不受影响,用户过期后重新报名时会自动触发重置,新学习周期进度从零开始
- 可灵活调整:如果需要保留部分历史数据(比如特定测验的历史得分),可在函数中增加过滤条件,指定排除不需要重置的内容
内容的提问来源于stack exchange,提问作者user16800423
相关产品推荐
相关产品推荐

