Can I create a function for auto-enrolling WP Roles in a Learndash course?

北战南征 提交于 2021-02-07 09:10:37

问题


Currently, LearnDash has a function (to be added to functions.php) that allows you to auto enroll a specific user in a course. I was wondering if a simple function could be added to my theme's function file and change this from user_id to a user ROLE? That way every user in that role is enrolled. Here is the starting point: (found in the dev section on Learndash)

 //* To enroll user to course:
ld_update_course_access($user_id, $course_id, $remove = false);

I have tried this:

//* Add users to course by role
ld_update_course_access($role_name = Subscriber, $course_id = 949, $remove = false);

On the "edit course" page editor I now see "1,0,12,Subscriber" inside the "course access list" but it doesn't actually work. Obviously, that access list is working with users only.

My thought process is creating a function that will: 1) Get user IDs from user role "My-Custom-Role" 2) Return IDs and update course access.

Is something like this possible?


回答1:


Yep, totally possible. The get_users() function allows you to get a list of users by role. See: https://codex.wordpress.org/Function_Reference/get_users

For example:

$users = get_users( [ 'role__in' => [ 'subscriber', 'author' ] ] );

foreach ( $users as $user ) {
    ld_update_course_access( $user->ID, 949, false );
}



回答2:


I worked with the development team and came up with a different although incomplete solution, so I've marked Linnea's as correct, because it works as asked in the question. This solution goes through their access hook sfwd_lms_has_access, however the "course list" never gets updated so a user is not officially "enrolled" until they start the course. By this I mean, you wont see them enrolled in the course on their profile, but if they start a lesson, it all of a sudden shows up! Thought it might help to post here in case it may help anyone as a starting point.

add_filter( 'sfwd_lms_has_access', function( $return, $post_id, $user_id ) {

        if ( empty( $user_id ) ) {

                $user_id = get_current_user_id();

        }

if(empty($user_id))

return $return;

$course_id = learndash_get_course_id( $post_id );

$allowed_course_ids = array( 949, 1135 );

if( !in_array($course_id, $allowed_course_ids))

return $return;

if(user_can($user_id, "3a_textbook"))

return true;

if(user_can($user_id, "subscriber"))

return true;

return $return;

}, 10, 3 );


来源:https://stackoverflow.com/questions/39358655/can-i-create-a-function-for-auto-enrolling-wp-roles-in-a-learndash-course

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!