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.

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. We are going to be editing the functions.php file, if you do that without a child 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.)

// ----------------------------------
// --  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:

// ----------------------------
// --  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:

// -----------------------------------
// --  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!

// --------------------------------
// --  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:

// --------------------------------------
// --  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
Here’s all of the customizations we did above in one chunk that you can just copy/paste into your functions.php file:

// ----------------------------------
// --  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.
Thank you, Scott – presscoders