Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/drift-creative-systems/drift-welcome/archive/refs/heads/main.zip
Drift: Welcome
Free WordPress plugin by Drift Creative Systems. Replaces the wp-admin dashboard with one welcome panel (logo, heading, message) and a grid of quick-link cards, so editors land somewhere useful. Optional white labelling of the admin bar, footer and login screen, and admin menus hidden from everyone except agency users. Settings are under Settings → Drift: Welcome.
- WordPress.org slug:
drift-welcome(submission pending) - Licence: GPL-2.0-or-later
- Requires WordPress 6.0+, PHP 7.4+
The user-facing documentation is readme.txt, which WordPress.org displays. This file is for developers.
Structure
drift-welcome.php Bootstrap: duplicate-install guard, constants, requires, init on plugins_loaded
includes/
class-drift-welcome-settings.php The drift_welcome_settings option: defaults, per-tab save (SECTIONS), sanitising
class-drift-welcome-admin.php Settings → Drift: Welcome: tabs, Welcome/Quick links/Colours forms, shared media_field()/color_field(), admin footer, Bonsai Dashboard conflict notice
class-drift-welcome-white-label.php White Label tab (drift_welcome_white_label): WordPress branding, admin bar logo, footer text, login screen
class-drift-welcome-admin-access.php "Agency user" profile checkbox and menu hiding/blocking for everyone else (drift_welcome_hidden_menus)
class-drift-welcome-dashboard.php Removes every other dashboard widget, registers the panel, builds the quick links
assets/
dashboard.css The panel. Dashboard only
admin.css Settings screen. Settings screen only
admin.js jQuery: image pickers, colour pickers, custom cards repeater
uninstall.php Removes the options on every site in a network, and the agency user meta
How the dashboard replacement works
wp_dashboard_setup runs Drift_Welcome_Dashboard::add_widget() at priority 10 (registers drift_welcome_panel), then strip_other_widgets() at 999: explicit remove_meta_box() calls for the core widgets, then a sweep of $wp_meta_boxes['dashboard'] that removes anything else. Our widget has to be registered before the sweep, or it would remove itself. wp_welcome_panel is removed outright.
Widgets are removed from $wp_meta_boxes, not hidden with CSS, so a plugin added later is swept up without this plugin knowing its widget ID.
Bonsai Dashboard does the same job. If both are active, each sweep removes the other's widget and the dashboard is empty. A notice on the Dashboard, Plugins and settings screens says so.
Quick links
Built in Drift_Welcome_Dashboard::get_quick_links(), in this order. Each card only shows when it leads somewhere the user can go:
| Card | Shows when |
|---|---|
| Pages / Posts | User has edit_pages / edit_posts |
| Theme Setup | theme-general-settings (ACF Options Page convention) is in the user's admin menu |
| Team | The configured post type (default team) exists and the user can edit it |
| Analytics | A URL is set |
| Custom cards | Always, in save order. Rows without a label or URL are dropped at save time |
| Support | A URL is set |
Then drift_welcome_quick_links filters the list. Cards missing a label, URL or icon are dropped after the filter.
The custom cards repeater (assets/admin.js) clones a `