Skip to main content
Robert Michalski

Add custom columns to WordPress user admin

To add columns to user admin use the manage_users_columns filter. The columns will appear in WordPress user admin, although they will be empty.

add_filter('manage_users_columns', 'YOUR_OWN_PREFIX_add_custom_user_columns', 10, 1);
function YOUR_OWN_PREFIX_add_custom_user_columns($columns) {
    //$columns['ID'] = 'ID';
    $columns['registration_date'] = 'Registration date';
    $columns['a_custom_user_meta_field'] = 'Custom user meta field';
    $columns['another_custom_user_meta_field'] = 'Another custom user meta field';

    return $columns;
}

Fill custom user columns with values #

Use the manage_users_custom_column filter to output values for your custom columns, remember to pass 3 parameters to the function.

add_filter('manage_users_custom_column', 'YOUR_OWN_PREFIX_add_custom_user_columns_values', 10, 3);
function YOUR_OWN_PREFIX_add_custom_user_columns_values($cell_value, $column_name, $user_id) {
    switch ($column_name) {
        case 'registration_date' :
            $date_format = 'Y-m-d H:i'; // customise date format
            $registered = get_the_author_meta('registered', $user_id);
            $registered_time = strtotime($registered);
            return date($date_format, $registered_time);
        case 'a_custom_user_meta_field':
            $meta = get_user_meta($user_id, $column_name, true);
            $value = strtoupper($meta); // process value somehow, for example check if it's a valid value, set a default value
            return $value;
        case 'another_custom_user_meta_field':
            $meta = get_user_meta($user_id, $column_name, true);
            $value = number_format((float)$meta, 2) // process value somehow, for example check if it's a valid value, set a default value
            return $value;
    }

    return $cell_value;
}

Make custom columns sortable #

Use the manage_users_sortable_columns filter to make user columns sortable, add mapping for column name to value of orderby GET-parameter.

add_filter('manage_users_sortable_columns', 'YOUR_OWN_PREFIX_make_custom_user_columns_sortable', 10, 1);
function YOUR_OWN_PREFIX_make_custom_user_columns_sortable($columns) {
    return wp_parse_args([
        //'column_id' => 'value_of_orderby_GET-param'
        'registration_date' => 'registered' // https://yourwebsite.com/wp-admin/users.php?orderby=registered&order=asc
        'another_custom_user_meta_field' => 'floatval' // https://yourwebsite.com/wp-admin/users.php?orderby=floatval&order=asc
    ], $columns);
}