Created
May 25, 2023 14:37
-
-
Save contemplate/e074507b50cdcf60dce0f542a65a8a79 to your computer and use it in GitHub Desktop.
LearnDash: Bulk Enroll / Remove Users from Course from User List
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*---- | |
Add Bulk Enroll / Remove options for each LearnDash Course in User List | |
---*/ | |
function add_course_bulk_actions( $actions ) { | |
$courses = get_posts( array( | |
'post_type' => 'sfwd-courses', | |
'posts_per_page' => -1, | |
'post_status' => 'publish', | |
) ); | |
foreach ( $courses as $course ) { | |
$course_id = $course->ID; | |
$course_name = $course->post_title; | |
$actions[ 'enroll_in_course-' . $course_id ] = 'Enroll in: ' . $course_name; | |
$actions[ 'remove_from_course-' . $course_id ] = 'Remove from: ' . $course_name; | |
} | |
return $actions; | |
} | |
add_filter( 'bulk_actions-users', 'add_course_bulk_actions' ); | |
function handle_bulk_actions_users( $redirect_to, $action, $user_ids ) { | |
$action_parts = explode( '-', $action ); | |
if ( count( $action_parts ) === 2 && ( $action_parts[0] === 'enroll_in_course' || $action_parts[0] === 'remove_from_course' ) ) { | |
$course_id = intval( $action_parts[1] ); | |
$success_count = 0; | |
$error_count = 0; | |
foreach ( $user_ids as $user_id ) { | |
if ( $action_parts[0] === 'enroll_in_course' ) { | |
$result = ld_update_course_access( $user_id, $course_id ); | |
} elseif ( $action_parts[0] === 'remove_from_course' ) { | |
$result = ld_update_course_access( $user_id, $course_id, true ); | |
} | |
if ( $result ) { | |
$success_count++; | |
} else { | |
$error_count++; | |
} | |
} | |
if ( $success_count > 0 ) { | |
$success_message = sprintf( _n( 'Successfully processed %s user.', 'Successfully processed %s users.', $success_count ), $success_count ); | |
set_transient( 'course_action_success_message', $success_message, 5 ); | |
} | |
if ( $error_count > 0 ) { | |
$error_message = sprintf( _n( 'Failed to process %s user.', 'Failed to process %s users.', $error_count ), $error_count ); | |
set_transient( 'course_action_error_message', $error_message, 5 ); | |
} | |
$redirect_to = add_query_arg( 'course_action_success', '1', $redirect_to ); | |
} | |
return $redirect_to; | |
} | |
add_filter( 'handle_bulk_actions-users', 'handle_bulk_actions_users', 10, 3 ); | |
function display_course_action_notices() { | |
if ( $success_message = get_transient( 'course_action_success_message' ) ) { | |
echo '<div class="notice notice-success is-dismissible"><p>' . $success_message . '</p></div>'; | |
delete_transient( 'course_action_success_message' ); | |
} | |
if ( $error_message = get_transient( 'course_action_error_message' ) ) { | |
echo '<div class="notice notice-error is-dismissible"><p>' . $error_message . '</p></div>'; | |
delete_transient( 'course_action_error_message' ); | |
} | |
} | |
add_action( 'admin_notices', 'display_course_action_notices' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment