By

How to Simplify the WordPress Admin for Your Clients

The WordPress admin dashboard can be a scary thing for first-time users.

When we develop sites for clients, sometimes it makes sense to remove some of the UI items they don’t need in the admin area to make it less intimidating. We used many of these admin customizations with WordPress Multisite (or WPMU), to make our customer’s sites more user-friendly. (The code in this article works with normal WP and multisite)

Here’s what the standard admin dashboard looks like (click image):

admin-dashboard-before

Here’s what it will look like after we make some modifications:

admin-dashboard-after


There are basically 3 things you can do easily to start:

  1. Remove some admin menus and sub menus
  2. Remove some default widgets
  3. Simplify dashboard and post/page list screens

Here are some tips and tricks for customizing the WordPress admin by adding code to your child theme’s functions.php file.

First off, you should be using a child theme to make these modifications.

We are going to be editing the functions.php file, if you do that without a child theme, you will lose all of your modifications when you update the theme.

Removing Admin Menus and Sub Menus

The first thing we can do is remove some menus. Your client probably doesn’t need to see the Settings => Permalinks menu, or the Tools => Import menu.

To be clear, we are not removing these from WordPress, we are just removing them from the view of your client.

Remove Top Level Menus

There’s 4 menus I think that can be removed altogether, add the code below to your functions.php file. (Obviously you’ll have to tailor this to your particular situation.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ----------------------------------
// --  REMOVE LEFT NAV MENU ITEMS  --
// ----------------------------------
 
function pc_remove_links_menu() {
 
     global $menu;
 
     remove_menu_page('upload.php'); // Media
     remove_menu_page('link-manager.php'); // Links
     remove_menu_page('options-general.php'); // Settings
     remove_menu_page('tools.php'); // Tools
}
 
add_action( 'admin_menu', 'pc_remove_links_menu' );

The Links menu will already be gone if you are installing a fresh version of WordPress, but the other menus are for site configuration, which most clients won’t be doing.

You can always add these back if you need to, but taking them out could keep your client from messing up the site!

Remove Sub Menus

For the remaining menus, there are some sub-menu items that just aren’t necessary for most clients to access. For example, Tools => Import is unnecessary if you’ve already fully built the site. Also, removing Appearance => Editor and Plugins => Editor could keep the client from really messing up a theme or plugin by accident!

Here is some example code you can use, add this to your functions.php file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// ----------------------------
// --  REMOVE NAV SUB MENUS  --
// ----------------------------
 
function pc_remove_submenus() {
 
  global $submenu;
 
  unset($submenu['themes.php'][5]); // Removes 'Themes'.
  unset($submenu['options-general.php'][15]); // Removes 'Writing'.
  unset($submenu['options-general.php'][25]); // Removes 'Discussion'.
  unset($submenu['tools.php'][5]); // Removes 'Available Tools'.
  unset($submenu['tools.php'][10]); // Removes 'Import'.
  unset($submenu['tools.php'][15]); // Removes 'Export'.
}
 
add_action( 'admin_menu', 'pc_remove_submenus' );
 
// Remove Appearance Editor Link
 
function remove_editor_menu() {
  remove_action('admin_menu', '_add_themes_utility_last', 101);
}
 
add_action('_admin_menu', 'remove_editor_menu', 1);
 
// Remove Plugin Editor Link
 
function pc_remove_plugin_editor() {
  remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
}
 
add_action('admin_init', 'pc_remove_plugin_editor');

You can find a list of all admin menus in the ../wp-admin/menu.php file.

Remove Default Widgets

The Widgets page has a ton of default widgets, and sometimes these can be overkill.

Widgets page before (click image):
admin-widgets-before

Widgets page after:
admin-widgets-after


Let’s remove some of these and make the widgets page less overwhelming, shall we? Add this code to your functions.php file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// -----------------------------------
// --  REMOVE SOME DEFAULT WIDGETS  --
// -----------------------------------
 
function pc_unregister_default_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
    unregister_widget('Twenty_Eleven_Ephemera_Widget');
}
 
add_action( 'widgets_init', 'pc_unregister_default_widgets', 11 );

Dashboard Widgets

We can also remove some widgets from the admin dashboard. Do you think your client cares about new posts on the WordPress development blog? Nope, let’s get rid of it!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// --------------------------------
// --  REMOVE DASHBOARD WIDGETS  --
// --------------------------------
 
function pc_remove_dashboard_widgets(){
  global$wp_meta_boxes;
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}
 
add_action( 'wp_dashboard_setup', 'pc_remove_dashboard_widgets', 11 );

Remove Columns from Post/Page View Screen

This last customization is pretty minor, but it contributes to the overall simplicity we are looking for.

Post columns before (click image):
admin-post-columns-before

Post columns after:
admin-post-columns-after


Let’s remove some extraneous information from the post/page view screen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// --------------------------------------
// --  REMOVE COLUMNS FROM POSTS LIST  --
// --------------------------------------
 
function pc_my_columns_filter( $columns ) {
    unset($columns['author']);
    unset($columns['tags']);
    unset($columns['categories']);
    unset($columns['tags']);
    return $columns;
}
 
add_filter( 'manage_edit-post_columns', 'pc_my_columns_filter', 10, 1 );
 
// --------------------------------------------
// --  REMOVE AUTHOR COLUMN FROM PAGES LIST  --
// --------------------------------------------
 
function pc_my_custom_pages_columns($columns) {
 
	unset(
		$columns['author']
	);
 
	return $columns;
}
 
add_filter( 'manage_pages_columns', 'pc_my_custom_pages_columns' );

The whole enchilada

Here’s all of the customizations we did above in one chunk that you can just copy/paste into your functions.php file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// ----------------------------------
// --  REMOVE LEFT NAV MENU ITEMS  --
// ----------------------------------
 
function pc_remove_links_menu() {
 
     global $menu;
 
     remove_menu_page('upload.php'); // Media
     remove_menu_page('link-manager.php'); // Links
     remove_menu_page('options-general.php'); // Settings
     remove_menu_page('tools.php'); // Tools
}
 
add_action( 'admin_menu', 'pc_remove_links_menu' );
 
// ----------------------------
// --  REMOVE NAV SUB MENUS  --
// ----------------------------
 
function pc_remove_submenus() {
 
  global $submenu;
 
  unset($submenu['themes.php'][5]); // Removes 'Themes'.
  unset($submenu['options-general.php'][15]); // Removes 'Writing'.
  unset($submenu['options-general.php'][25]); // Removes 'Discussion'.
  unset($submenu['tools.php'][5]); // Removes 'Available Tools'.
  unset($submenu['tools.php'][10]); // Removes 'Import'.
  unset($submenu['tools.php'][15]); // Removes 'Export'.
}
 
add_action( 'admin_menu', 'pc_remove_submenus' );
 
// Remove Appearance Editor Link
 
function remove_editor_menu() {
  remove_action('admin_menu', '_add_themes_utility_last', 101);
}
 
add_action('_admin_menu', 'remove_editor_menu', 1);
 
// Remove Plugin Editor Link
 
function pc_remove_plugin_editor() {
  remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
}
 
add_action('admin_init', 'pc_remove_plugin_editor');
 
// -----------------------------------
// --  REMOVE SOME DEFAULT WIDGETS  --
// -----------------------------------
 
function pc_unregister_default_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
    unregister_widget('Twenty_Eleven_Ephemera_Widget');
}
 
add_action( 'widgets_init', 'pc_unregister_default_widgets', 11 );
 
// --------------------------------
// --  REMOVE DASHBOARD WIDGETS  --
// --------------------------------
 
function pc_remove_dashboard_widgets(){
  global$wp_meta_boxes;
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
  unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
  unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}
 
add_action( 'wp_dashboard_setup', 'pc_remove_dashboard_widgets', 11 );
 
// --------------------------------------
// --  REMOVE COLUMNS FROM POSTS LIST  --
// --------------------------------------
 
function pc_my_columns_filter( $columns ) {
    unset($columns['author']);
    unset($columns['tags']);
    unset($columns['categories']);
    unset($columns['tags']);
    return $columns;
}
 
add_filter( 'manage_edit-post_columns', 'pc_my_columns_filter', 10, 1 );
 
// --------------------------------------------
// --  REMOVE AUTHOR COLUMN FROM PAGES LIST  --
// --------------------------------------------
 
function pc_my_custom_pages_columns($columns) {
 
	unset(
		$columns['author']
	);
 
	return $columns;
}
 
add_filter( 'manage_pages_columns', 'pc_my_custom_pages_columns' );

Simplifying the admin for your clients can save you time and make your clients happier. Good luck! Check out this tutorial on Tuts Plus for further admin customization.

What other customizations do you make to the admin area for your clients? Let us know in the comments.

15 Responses to How to Simplify the WordPress Admin for Your Clients

  1. Lee Rickler says:

    Nice tut – A lot of these options, and a ton more, available via my plugin – http://wordpress.org/extend/plugins/point-and-stare-cms-functions/

  2. Frank says:

    Also you can use the plugin Adminimize for this job, no coding, fast changes and different simplify for each role.

  3. Piet says:

    You can also have a go at the welcome panel (http://www.wpexplorer.com/custom-wordpress-welcome-message/), make it a permanent one with info on what to do and anything else you want to add in there.

    And I always add my dashboard feed widget (http://wordpress.org/extend/plugins/dashboard-feed-widget/) to the dashboards of the sites of clients.

  4. Scott Pelland says:

    We use a slightly different approach to cleaning up the dashboard. We create a new user role for clients who want less clutter. The benefit is that we still have full access when going in as administrators to update the site.

    • Scott says:

      Hey Scott, that’s a great point. We do the same thing on our multisite install so everyone but the super-admin sees a simpler view.

  5. Pingback: WordPress News, Tutorials & Resources Roundup No.27 - WPLift

  6. I dont know if im imagining this, but im sure that WP.org are planning to do account level filtering on admin access / functionality in the next major release, along with a new admin look and feel?

  7. Nice tut Scott. Found a code snippet that I will be using on my version for clients.

  8. Pingback: How to Simplify & Customize the WordPress admin | Press Coders | The Pending Draft

  9. Airton says:

    Thank you scott, and comments that have helped me as a beginner.

  10. shafiq says:

    awesome tutorial :)