Skip to content

Instantly share code, notes, and snippets.

@contemplate
Created May 25, 2023 14:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save contemplate/e074507b50cdcf60dce0f542a65a8a79 to your computer and use it in GitHub Desktop.
Save contemplate/e074507b50cdcf60dce0f542a65a8a79 to your computer and use it in GitHub Desktop.
LearnDash: Bulk Enroll / Remove Users from Course from User List
/*----
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