Skip to main content

WordPress, as a versatile Content Management System (CMS), offers an array of capabilities making it an ideal platform for various applications, including Learning Management Systems (LMS). One of the key aspects of managing a WordPress LMS is effective user management, especially for site administrators who need to oversee course participants and educators. This article introduces a custom code snippet designed to extend user management capabilities, specifically tailored for a WordPress-based LMS.

The Need for Custom User Capabilities

In a multi-site WordPress LMS environment, administrators often need to manage users differently based on their roles and responsibilities. For instance, a site admin might need to view or edit user data pertinent to their specific site without accessing the entire network’s user base. WordPress’s default capabilities are quite broad and may not cater to such specific needs. This is where user capabilities comes into play, allowing for more granular control and enhancing the site’s security and usability.

Custom Code for Enhanced Capabilities

Below is a refined version of a WordPress function that can be added to your site’s functions.php file or a custom plugin. This function, mc_admin_users_caps, dynamically adjusts capabilities for site admins to provide them with capabilities to edit user meta (accessing the Edit User screen) for their assigned site:
// Improved function to map custom capabilities
function mc_admin_users_caps($caps, $cap, $user_id, $args) {
foreach ($caps as $key => $capability) {
if ($capability !== 'do_not_allow') {
// Simplified switch statement
switch ($cap) {
case 'edit_user':
case 'edit_users':
$caps[$key] = 'edit_users';
case 'delete_user':
case 'delete_users':
$caps[$key] = 'delete_users';
case 'create_users':
$caps[$key] = $cap;
return $caps;
add_filter('map_meta_cap', 'mc_admin_users_caps', 1, 4);
// Removing all filters for 'enable_edit_any_user_configuration'
add_filter('enable_edit_any_user_configuration', '__return_true');
// Improved permission check function
function mc_edit_permission_check() {
global $current_user, $profileuser;
$screen = get_current_screen();
wp_get_current_user(); // Updated to use a non-deprecated function
// Checking permissions and super admin status
if (!is_super_admin($current_user->ID) && in_array($screen->base, ['user-edit', 'user-edit-network'])) {
if (is_super_admin($profileuser->ID)) {
wp_die(__('You do not have permission to edit this user.'));
} elseif (!is_user_member_of_blog($profileuser->ID, get_current_blog_id()) || !is_user_member_of_blog($current_user->ID, get_current_blog_id())) {
wp_die(__('You do not have permission to edit this user.'));
add_action('admin_head', 'mc_edit_permission_check');

This script primarily checks and modifies capabilities for editing, deleting, and creating users. By using this, you can ensure that site admins who have the permissions necessary for their roles have access to this function.

Practical Applications for WordPress LMS Development

By implementing the custom code provided, you can:

  • Enhance Security: Limit the possibility of accidental or unauthorized changes to user data by ensuring that site admins can only edit information pertinent to their specific site.
  • Improve Usability: Make the admin interface more intuitive for users that require Subscriber-level meta user data access.
  • Streamline Administration: Reduce the time and effort required to manage users by providing admins with direct access to the capabilities they need (without needing the capabilities of a Super Admin user).

Remember, before implementing any custom code, always back up your site and test the changes in a staging environment to ensure they work as expected. For more great features and products to enhance your WordPress LMS platform, be sure to check out our extension plugins such as the eLearning Magic Toolkit plugin for Articulate Storyline, and our Impact Focus knowledge retention spaced-repetition quiz builder toolkit.

Chris Hodgson

Chris Hodgson is an award-winning Digital learning Solutions Developer and Director of Discover eLearning Ltd. He supports organisations of all sizes to implement engaging, meaningful, and impactful eLearning solutions. Chris has 15 years’ experience working in both private and public sector learning and development.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.