Repository navigation
v0.23.0 — wire custom_login + adminbar_logo (whitelabel complete)
What's new in v0.23.0 — Whitelabel feature complete
Final wave of whitelabel toggles. The two remaining reserved image-URL toggles ship working WP-side handlers, completing the 5-toggle agency rebrand surface DeckWP committed to at the v0.21.0 foundation.
custom_login
Three coordinated overrides on wp-login.php:
- Logo image —
.login h1 abackground-image replaced withcustom_login_logo_url. 84×84 box,background-size: containso non-square logos letterbox cleanly. - Accent color —
custom_login_color(validated as CSS hex) tints the primary button, focus rings on form inputs, and link hover states. Invalid hex strings are silently dropped at render time — the storage layer accepts any string; render-time validation prevents broken CSS. - Logo URL + title — anchor retargeted via
login_headerurl/login_headertextfilters. Fallback chain for the URL: configured connectorauthor_uri→home_url('/'); neverhttps://wordpress.org/. Title text falls back: configured connector pluginname→ site title; never "Powered by WordPress".
Toggle ON with both URL + color empty still applies the URL/text retargets — partial overrides are valid.
adminbar_logo
Removes the entire wp-logo adminbar node (including its About / Documentation / Support / Feedback sub-menu) so the customer's adminbar doesn't leak WP identity.
When adminbar_logo_url is set, drops in a replacement deckwp-whitelabel-logo node in the same top-secondary group, styled via CSS background-image at 20×20 (matches the wp-logo icon container so the adminbar height doesn't shift).
CSS is emitted across wp_before_admin_bar_render, admin_head, and wp_head because the adminbar renders in three contexts (wp-admin, front-end logged-in, customizer); each has different head-action timing. Idempotent via the unique style#deckwp-adminbar-logo id.
Internals
Three new private helpers:
sanitizeHexColor()— validates CSS hex (#RGB,#RGBA,#RRGGBB,#RRGGBBAA). Strict at render, lenient at storage.resolveConnectorAuthorUri()— reads connector's per-pluginauthor_urioverride for the login URL fallback chain.resolveConnectorPluginName()— same, for login hover text + adminbar screen-reader label.
Wire contract
No change. WhitelabelRoute already accepted these keys in v0.21.0 — this release wires their WP-side behavior.
Whitelabel feature: complete
With v0.23.0 the whitelabel surface is feature-complete for v1. All five agency-level toggles (hide_updates, suppress_activate, help_links, custom_login, adminbar_logo) + the per-plugin hide flag are now backed by working WP-side handlers.
Future iterations land as enhancements (e.g. theme rebrand, per-plugin plugin_uri overrides), not as "toggle X is still pending".
Upgrading: drop in deckwp-connect.zip or self-update via the DeckWP dashboard. No DB migration. Existing whitelabel configs continue to work unchanged.