0

我已将课程从开放更改为免费,所有完成课程的用户都无法再在 ld_profile 短代码列表中看到他们的课程,因为他们没有课程注册日期。

我想创建一个简短的一次性函数来为所有已完成课程且没有该课程注册日期的用户添加注册日期。日期应等于完成课程的日期。

在编辑用户配置文件时,它与“设置注册日期:”的功能大致相同,但我不知道执行此操作时需要的名称或其他相关功能。

我已经尝试了一些功能,但似乎没有像我期望的那样工作。我无法计算出正确的 learndash 函数来获取“完成”状态日期和设置注册日期,使用 meta 进行黑客攻击真的不可靠。

ld_update_course_access() ld_course_access_from_update()

这是我失败的代码尝试。

function admin_set_user_enrolments(){
    // testing setting enrol dates based on completion.
    if ($_REQUEST['set_user_enrolments'] == 'true') {
    //echo(json_encode(learndash_get_users_for_course(4904,['fields'=>'ID'])));
    echo('Have you set Courses to Free and expire yet?');
    $query_args = array(
        'post_type'      => learndash_get_post_type_slug('course'),
        'fields'         => 'ids',
        'posts_per_page' => -1,
        'post_status'    => 'publish'
    );  
    $query = new \WP_Query($query_args);
    $course_ids = $query->get_posts();  
    $user_query = new WP_User_Query(['fields' => 'ID']);
    $user_ids = (array) $user_query->results;
    foreach ($course_ids as $course_id) {
        if (learndash_get_setting($course_id, 'expire_access') !== 'on' || absint(learndash_get_setting($course_id, 'expire_access_days')) <= 0) {
            // ignore courses without expire dates, this means Open too.
           continue;
        }
        foreach ($user_ids as $user_id) {
            if ($user_id != 5) {
                continue;
            }
            //if (empty(ld_course_access_from($course_id, $user_id))) {
            // does not have access
            $completed_on = get_user_meta($user_id, 'course_completed_' . $course_id, true);
            $status = learndash_course_status($course_id, $user_id,true);
            if ($completed_on /*learndash_get_course_certificate_link( $course_id, $cert_user_id)*/) {
                // has earned a certificate, assumed to complete the course.
                echo('<br>update_user_meta ' . json_encode([$course_id, $user_id, $completed_on, ' status '.$status]));
                echo(update_user_meta( $user_id, 'course_' . $course_id . '_access_from', $completed_on ));
                ld_update_course_access( $user_id, $course_id );
                // THIS DOESNT WORK ->
                ld_course_access_from_update($course_id, $user_id, $completed_on, true);
            }else{
                echo('<br>Not $completed_on CourseID: '.$course_id.' UserID: '.$user_id . ' status '.$status.' '.json_encode($completed_on));
            }
            //}
        }

        // learndash_user_set_enrolled_courses($user_id,  $course_id)
    }
    die('<br/>Done admin_set_user_enrolments()');
}
}
4

0 回答 0