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)
There are basically 3 things you can do easily to start:
- Remove some admin menus and sub menus
- Remove some default widgets
- 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.
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.
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.
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/
Also you can use the plugin Adminimize for this job, no coding, fast changes and different simplify for each role.
Hi Frank, I’ve seen your plugin, it could be a good option for some people. Thanks for stopping by
I use Adminimize Plugin (http://wordpress.org/extend/plugins/adminimize/) for the same.
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.
Hi Piet, I haven’t seen that welcome message plugin, looks like a good one to check out. Thanks!
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.
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.
Pingback: WordPress News, Tutorials & Resources Roundup No.27 - WPLift
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?
Not sure Mathew, I hadn’t heard about that.
Nice tut Scott. Found a code snippet that I will be using on my version for clients.
Pingback: How to Simplify & Customize the WordPress admin | Press Coders | The Pending Draft
Thank you scott, and comments that have helped me as a beginner.
awesome tutorial