Quick answer: WordPress dashboard widgets are the boxes on the main admin screen, such as At a Glance, Activity, Quick Draft and WordPress News. For client sites, remove the ones that cause confusion, then add custom widgets with wp_add_dashboard_widget() that show what the client actually needs: quick links to common tasks, recent enquiries or orders, simple help notes and your support contact. Keep it to a handful of widgets, restrict them by user role, and cache anything that pulls in outside data.
When a client logs in to their new WordPress site for the first time, the dashboard is the first thing they see. Out of the box, it shows a news feed from WordPress.org, a Quick Draft box, comment counts and a welcome panel full of links aimed at people setting up a blog. Add a few plugins and it fills with promotional boxes and notices. For a business owner who just wants to update a page or check new orders, this is noise. Here is how to turn the dashboard into something genuinely useful.
What the default dashboard contains
In WordPress 4.5, a fresh install shows:
- Welcome panel: links to customise the site, write a first post and so on.
- At a Glance: counts of posts, pages and comments, plus the WordPress version and theme.
- Activity: recently published posts and recent comments.
- Quick Draft: a small form to start a post.
- WordPress News: a feed of posts from the WordPress.org blog and planet.
Plugins often add their own: SEO overview boxes, WooCommerce status, form entry counts, security scan results and the occasional advert. Each user can hide boxes through Screen Options and drag them around, but most clients never find those controls.
Why bother customising it
A tidy dashboard does a few useful jobs on a client site:
- Less confusion. Clients do not wonder whether they need to act on a WordPress News post about a developer release.
- Fewer support requests. Links to the right screens and short how-to notes answer common questions before they reach your inbox.
- A clear next step. If the client’s main tasks are adding a blog post and checking enquiries, put those first.
- A sense of ownership. A dashboard with their own data on it feels like their system rather than a generic one.
Removing widgets clients do not need
Dashboard widgets are registered as meta boxes, so you remove them with remove_meta_box() on the wp_dashboard_setup hook. Put this in a small site-specific plugin or your theme’s functions.php:
add_action( 'wp_dashboard_setup', 'iws_clean_dashboard', 20 );
function iws_clean_dashboard() {
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' ); // WordPress News
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' ); // Quick Draft
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' ); // Activity
}
The priority of 20 makes sure your code runs after most plugins have added their boxes, so you can remove those too. To find the ID of a plugin’s widget, inspect the box in your browser: the outer div carries the ID.
To remove the welcome panel for everyone:
remove_action( 'welcome_panel', 'wp_welcome_panel' );
A sensible rule: remove things for clients, but keep them for administrators. Wrap the removals in a capability check so you still see At a Glance and any plugin status boxes you rely on:
if ( ! current_user_can( 'manage_options' ) ) {
// remove widgets here
}
Adding your own dashboard widget
The core function is wp_add_dashboard_widget(). It takes an ID, a title and a callback that prints the content:
add_action( 'wp_dashboard_setup', 'iws_add_help_widget' );
function iws_add_help_widget() {
wp_add_dashboard_widget(
'iws_help_widget',
'Your Website: Quick Help',
'iws_help_widget_output'
);
}
function iws_help_widget_output() {
echo '<p>Need a hand? Email us at [email protected].</p>';
echo '<ul>';
echo '<li><a href="' . esc_url( admin_url( 'post-new.php' ) ) . '">Write a new blog post</a></li>';
echo '<li><a href="' . esc_url( admin_url( 'edit.php?post_type=page' ) ) . '">Edit your pages</a></li>';
echo '</ul>';
}
Always escape output with functions such as esc_html(), esc_url() and esc_attr(), the same as anywhere else in the admin.
There is an optional fourth argument for a control callback. If you pass one, WordPress adds a “Configure” link to the widget so a user can change settings, such as how many items to show. Store those settings with update_option() or as user meta.
Positioning your widget
wp_add_dashboard_widget() always places new widgets in the main column. To put a widget in the side column or move it to the top, use add_meta_box() with the dashboard screen instead, or reorder the global $wp_meta_boxes array. Most of the time, putting your help widget first in the main column is enough.
Widget ideas that clients actually use
Quick links to common tasks
A short list of the five or six things the client does most: add a post, edit the homepage, view orders, update opening hours, check form entries. Use plain labels in their words, not WordPress terms.
Recent enquiries or orders
If the site uses a form plugin that stores entries, or WooCommerce, show the latest five with a link through to the full list. For WooCommerce, version 2.6 added wc_get_orders(), and on older stores a simple WP_Query on the shop_order post type with the right statuses does the job. Keep it brief: date, name and status are usually enough.
Content reminders
A widget that shows when the last blog post went out, or lists drafts waiting to be finished, gives a gentle nudge to keep the site fresh. A query for the most recent published post and a count of drafts takes a few lines.
Help notes and short videos
A few lines on how to add an image, how to use a page template you built, or which image sizes work best. If you record short screen videos for the handover, link to them here. Our guide to WordPress image sizes is the kind of reference worth pointing clients to.
Site health at a glance
For administrators, a small widget showing whether backups ran, when plugins were last updated, or whether a security scan found anything. Many security and backup plugins offer this already. If you use one, keep its widget and hide the others. See our WordPress security guide for the basics worth monitoring.
Key numbers from analytics
Some clients like to see visits or enquiries without logging in to Google Analytics. Plugins exist that pull a small report into the dashboard. If you build your own using the Google Analytics Reporting API, cache the result, because calling an outside API every time someone loads the dashboard slows the admin down.
Caching data in dashboard widgets
Any widget that runs heavy queries or contacts an outside service should store its result in a transient:
$data = get_transient( 'iws_dashboard_stats' );
if ( false === $data ) {
$data = iws_fetch_stats(); // your slow call
set_transient( 'iws_dashboard_stats', $data, HOUR_IN_SECONDS );
}
This keeps the dashboard quick and avoids hitting API limits. An hour is plenty for most summary numbers.
Controlling who sees what
Different users need different dashboards. An editor writing blog posts does not need order data, and a shop manager does not need SEO notes. Check capabilities before adding a widget:
if ( current_user_can( 'edit_shop_orders' ) ) {
wp_add_dashboard_widget( 'iws_orders', 'Latest Orders', 'iws_orders_output' );
}
Using capabilities rather than role names means your code keeps working if roles are renamed or adjusted by a plugin.
Where to put the code
Dashboard changes are site functionality, not design, so they belong in a small custom plugin rather than the theme. If the client changes theme later, their dashboard stays the same. A single-file plugin in wp-content/plugins/ or a must-use plugin in wp-content/mu-plugins/ both work. Must-use plugins load automatically and cannot be switched off from the admin, which suits code the client should not disable by accident.
Common mistakes
- Too many widgets. Four or five useful boxes beat twelve. If everything is on the dashboard, nothing stands out.
- Uncached outside calls. A slow API request on every dashboard load makes the whole admin feel slow.
- Hiding things from yourself. Use capability checks so administrators still see status and warning boxes.
- Developer language. Write labels and help text in the client’s words.
- Forgetting multisite. On a network, the network admin dashboard uses the
wp_network_dashboard_setuphook instead.
FAQ
Will removing dashboard widgets break anything?
No. Removing a widget only stops it showing on the dashboard. The underlying features still work.
Can clients rearrange the widgets themselves?
Yes. Users can drag boxes around and hide them through Screen Options, and WordPress remembers their layout per user.
Is there a plugin that does this without code?
Several plugins let you hide dashboard widgets and add simple text widgets through settings. For anything showing live data or tied to roles, a few lines of custom code are usually cleaner.
Make the admin feel like theirs
A dashboard that shows clients what matters is a small piece of work that makes a site easier to run every day. It is one of the details we build into client sites as standard. If you want a WordPress site that is easy for your team to manage, see how we help businesses turn visitors into customers.