Switch into any theme. Nobody else notices.
WP Shipyard lets an administrator browse the site in a different installed theme while visitors, and everyone else who is logged in, keep seeing the live one. Fit the new theme out on the real content, then launch it.
Version 1.0.0. WordPress 6.2 or newer, PHP 7.4 or newer. Free, MIT licensed.
How a launch goes
-
Enter the shipyard
Appearance, then WP Shipyard, lists every installed theme with its screenshot. Pick one and choose Switch to. From that moment your browser renders the site in that theme. It is a cookie on your browser, not a change in the database.
-
Fit out the theme
Open the Customizer or the Site Editor from the same screen, assign menus, fill widget areas, populate the fields the new templates expect. WordPress keeps theme options, menu locations and Customizer settings per theme, so the work is waiting when the theme goes live. The admin bar keeps every other theme one click away while you work.
-
Launch, or step back out
Ready? Choose Launch. After one confirmation the theme is live for everyone and your browser leaves the shipyard. Not yet? Choose Exit WP Shipyard in the admin bar and you are back on the live theme instantly.
What it does, and what it leaves alone
- Administrators only
- The Tools page, the admin bar entries and the switch itself require the manage_options capability. Nothing is exposed to visitors or lower roles.
- One browser at a time
- The switch is a cookie set for a year on the browser that made it. Another device, another browser or another user still gets the live theme. On multisite it is per site as well.
- The active theme stays put
- The stylesheet and template options in the database are never written until you choose Launch, and Launch is an ordinary theme activation. Deactivate the plugin and every session is back on the live theme.
- Not a staging site
- Posts, media and plugin data are shared with the live site because they are the live site. Only the theme differs. Draft content stays draft.
- Any installed theme
- Block or classic, parent or child. A theme that is broken or needs a newer PHP says so instead of taking your browser down, and there is an escape hatch if one ever does.
- Caches never see it
- Every switched response is sent with no-store headers and the DONOTCACHEPAGE flag that WP Rocket, W3 Total Cache, LiteSpeed and the hosts' caches honour. The new theme is never stored for anyone.
Install in a minute
- Download wp-shipyard.zip.
- In wp-admin go to Plugins, Add New, Upload Plugin, and choose the zip.
- Activate it. WP Shipyard appears under Tools and in the admin bar.
# or with WP-CLI
$ wp plugin install https://github.com/WPShipyard/wp-shipyard/releases/latest/download/wp-shipyard.zip --activate
Installing WP Shipyard (1.0.0)
Plugin installed successfully.
Activating 'wp-shipyard'...
Plugin 'wp-shipyard' activated.
Questions people ask
Can a visitor end up in the shipyard by accident?
No. The cookie is only honoured for logged-in users, and only administrators can set it through the plugin. A logged-out visitor with a stale cookie gets the live theme.
What about page caching?
Handled. Switched responses carry Cache-Control no-store and the DONOTCACHEPAGE constant, so page caches, CDNs and host caches skip them. A header, X-WP-Shipyard, tells you which theme you are looking at if you ever need to check.
Do Customizer changes I make in the shipyard survive the real switch?
Yes. WordPress stores Customizer settings and menu locations in theme_mods keyed by theme, and the Customizer sees the shipyard theme as current. Activate the theme later and those settings are already there.
How is this different from WP Freighter?
WP Freighter runs many separate sites from one install, each with its own database tables. WP Shipyard changes one thing, the theme, for one browser, on the site you already have. Use Shipyard to prepare a redesign, Freighter to run a fleet.
How do I remove it?
Deactivate and delete the plugin. It creates no tables and no options, so there is nothing to clean up. Any lingering cookie is ignored once the plugin is gone. If you launched a theme, that theme simply stays active.
What if a theme breaks the site for my browser?
It should not get that far: themes with errors or unmet requirements are refused before the switch. If one still does, add ?wp_shipyard=exit to any URL of the site. The switch is cleared before any theme code runs, and the parameter is dropped from the address.