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

LearnDash中作业审核通过后自动完成对应主题的实现方法

LearnDash作业审核通过自动标记关联主题完成实现方案

该需求可通过LearnDash原生钩子+官方进度接口实现,无需改造平台核心代码、无需安装额外插件,且能精准控制生效范围,不会影响非作业类主题的原有进度规则,具体实现如下:

  • 核心触发逻辑选择
    直接挂载learndash_assignment_approved动作钩子,该钩子仅在讲师手动审核通过学生作业时触发,会返回作业ID、作业对象、提交用户ID三个核心参数,不存在其他场景误触发的问题。
  • 生效范围校验(核心,避免规则越界)
    触发逻辑执行前先做两层判断,确保规则只在要求的场景生效:
    1. 提取作业关联的学习步骤ID,校验该步骤的文章类型是否为LearnDash主题(sfwd-topic),排除课程、课时等其他类型的学习步骤
    2. 校验该主题是否开启了作业上传配置,排除没有绑定作业要求的普通主题
  • 进度标记逻辑
    不直接操作数据库进度表,调用LearnDash官方提供的learndash_process_mark_complete()方法标记完成,自动同步用户学习进度、完成时间、进度百分比等统计数据,和平台原生进度逻辑完全兼容,不会出现数据不一致的问题。

可直接部署的代码片段

将以下代码添加到当前子主题的functions.php文件,或者自定义功能插件中即可生效:

add_action( 'learndash_assignment_approved', 'ld_auto_complete_topic_when_assignment_passed', 10, 3 );
function ld_auto_complete_topic_when_assignment_passed( $assignment_id, $assignment_post, $user_id ) {
    // 获取作业关联的学习步骤ID
    $related_step_id = get_post_meta( $assignment_id, 'lesson_id', true );
    if ( ! $related_step_id ) {
        return;
    }

    // 第一层校验:关联步骤必须是主题类型
    if ( get_post_type( $related_step_id ) !== 'sfwd-topic' ) {
        return;
    }

    // 第二层校验:该主题必须开启了作业上传要求
    $topic_assignment_enabled = learndash_get_setting( $related_step_id, 'assignment_upload' );
    if ( $topic_assignment_enabled !== 'on' ) {
        return;
    }

    // 若主题已经完成,直接终止逻辑避免重复执行
    if ( ! learndash_is_topic_not_complete( $user_id, $related_step_id ) ) {
        return;
    }

    // 调用官方方法标记主题完成
    learndash_process_mark_complete( $user_id, $related_step_id );
}

上线前建议做3个场景的验证:

  1. 学生提交绑定作业的主题对应作业,讲师审核通过后,确认该主题自动标记为完成
  2. 学生学习未配置作业的普通主题,确认不会被自动标记完成,进度规则和之前一致
  3. 学生提交课程、课时层级的作业,审核通过后确认不会触发主题自动完成逻辑

内容的提问来源于stack exchange,提问作者Avinish Kr. Singh Rajawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:25