Customize Admin Users Screen based on Role

I’ve added a role of “Customer” and I am working on customizing the Users Screen for that role. What I’d like to do is customize columns based on that particular role.

Note:

Read More

For example, take a look at the screenshot. How would I remove the reference to the posts column for only the customer role?

Example of current "Customer" screen

Related posts

Leave a Reply

3 comments

  1. Manage Columns

    It’s pretty straight forward using the manage_{post-type-name}_columns filter: Just switch per $capability and unset what you don’t need in the $post_columns array.

    function wpse19435_manage_columns( $posts_columns )
    {
        // First role: add a column - take a look at the second function
        if ( current_user_can( $capability_admin ) )
        {
            $posts_columns['some_column_name'] = _x( 'Whatever', 'column name' );
        }
        // second role: remove a column
        elseif ( current_user_can( $capability_other_role ) )
        {
            unset( $posts_columns['comments'] );
        }
        // default
        else
        {
            // do stuff for all other roles
        }
    
        return $posts_columns;
    }
    add_filter( 'manage_{post-type-name}_columns', 'wpse19435_manage_columns' );
    

    Add a column

    function wpse19435_manage_single_column( $column_name, $id ) 
    {
        switch( $column_name ) 
        {
            case 'some_column_name' :
                // do stuff
                break;
    
            default :
                // do stuff
                break;
        }
    
    }
    add_action('manage_{post-type-name}_custom_column', 'wpse19435_manage_single_column', 10, 2);
    
  2. Thanks to Mike23 for the tip. Here’s the code that I’m using to add a column to only the “customer” role:

    if( $_GET['role'] == "customer" ) { 
    
    add_filter('manage_users_columns', 'add_ecommerce_column');
    add_filter('manage_users_custom_column', 'manage_ecommerce_column', 10, 3);
    
    
    function add_ecommerce_column($columns) {
            $columns['ecommerce'] = 'Ecommerce';
        return $columns;
    
    }
    
    function manage_ecommerce_column($empty='', $column_name, $id) {
        if( $column_name == 'ecommerce' ) {
            return $column_name.$id;    
            }
    }
    }
    

    Any ideas or suggestions for improvement are very welcomed.

  3. Have a look at current_user_can. With that you can filter your code by roles, and then do whatever you want to customize the interface.

    Quick and dirty, with CSS. Put this in your functions.php :

    function add_custom_admin_styles() {
        /* Customers */
        if(current_user_can('customer')){
            echo '
            <style type="text/css">
                .column-posts{display:none!important;}  
            </style>';
        }
    }
    add_action('admin_head', 'add_custom_admin_styles');