The default WordPress admin dashboard is built for WordPress developers and power users, not for the clients and content editors who interact with most WordPress sites day-to-day. The WordPress news feed, the welcome panel, the quick draft box, and the Site Health widget are all either irrelevant to non-technical users or actively distracting. A client who logs in to update a blog post doesn’t need to see WordPress developer news or be prompted to check their site health score, they need a clean, focused environment where they can do their work.
This snippet removes the most commonly unwanted default dashboard widgets, leaving only the At a Glance and Activity widgets that show useful content summaries.
The Code
Add this to your functions.php or a site-specific plugin. All removals happen on the wp_dashboard_setup hook, which fires after all widgets have been registered, making it safe to remove any of them at that point.
remove_meta_box vs remove_action
Most dashboard widgets are registered as meta boxes and can be removed with remove_meta_box(). The welcome panel is different, it’s rendered through a dedicated action hook rather than the meta box system, so it requires remove_action( 'welcome_panel', 'wp_welcome_panel' ) to remove. The snippet handles both mechanisms.
What Each Widget Does
dashboard_primary is the WordPress Events and News widget, a live feed from wordpress.org showing upcoming WordCamps and recent WordPress blog posts. It makes an outbound HTTP request on every dashboard load and is universally irrelevant to site clients.
dashboard_quick_press is the Quick Draft widget that allows creating draft posts from the dashboard without going to the post editor. It’s occasionally useful for developers but rarely for clients with a full post editing workflow.
dashboard_site_health shows the Site Health score and summary. Removing it from the dashboard doesn’t disable Site Health, the full Site Health screen remains accessible at Tools → Site Health. The commented-out section in the snippet shows how to remove it from the menu as well if needed.
Role-Based Removal
All of these removals apply to every user role by default. If you want to keep certain widgets visible to administrators while hiding them from editors and below, wrap each remove_meta_box() call in a ! current_user_can( 'manage_options' ) check. This lets admins see the full dashboard while clients get the cleaned-up version.
Third-Party Plugin Widgets
Many plugins add their own dashboard widgets, WooCommerce, Yoast SEO, Jetpack, and others all register widgets on the dashboard. These follow the same remove_meta_box() pattern. To find the widget ID for a third-party widget, inspect the widget’s wrapper element in your browser, the meta box ID is typically set as the element’s HTML ID attribute.
add_action( 'wp_dashboard_setup', function() {
// WordPress core widgets
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' ); // WordPress news & events
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' ); // Quick Draft
remove_meta_box( 'dashboard_recent_drafts', 'dashboard', 'side' ); // Recent Drafts
remove_meta_box( 'dashboard_secondary', 'dashboard', 'side' ); // Other WordPress news
remove_meta_box( 'dashboard_incoming_links','dashboard', 'normal' ); // Incoming Links (legacy)
remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' ); // Plugin news (legacy)
remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' ); // Site Health
// Remove the welcome panel separately, it uses a different mechanism
remove_action( 'welcome_panel', 'wp_welcome_panel' );
} );
// Keep Site Health accessible via the menu but remove it from the dashboard
// If you want to remove the Site Health menu item entirely:
// add_action( 'admin_menu', function() {
// remove_submenu_page( 'index.php', 'site-health.php' );
// } );
