Many WordPress sites. One install.
WP Freighter turns a single WordPress installation into a multi-tenant host. Each tenant site gets its own database tables and, if you want, its own wp-content. New sites take seconds. No second server, no multisite.
| ID | Domain | Content | Created |
|---|---|---|---|
| 1 | austinginder.com | content/1 | 2020-06-30 |
| 4 | wpfreighter.com | content/4 | 2020-07-02 |
| 8 | disembark.host | content/8 | 2021-10-07 |
| 15 | cove.run | content/15 | 2025-07-11 |
| 18 | minnadmin.com | content/18 | 2026-07-04 |
| 19 | rutter.run | content/19 | 2026-07-08 |
| 20 | commandcenter.run | content/20 | 2026-07-10 |
The install serving this page. wpfreighter.com is tenant 4. Every site in the list is a separate WordPress site with its own users, plugins and uploads.
One request, one prefix.
There is no magic layer. WordPress already supports any table prefix and any content directory; Freighter just decides which ones to use before core loads.
- wp-config.php includes the bootstrap
One line after
$table_prefixpulls inwp-content/freighter.php. The plugin writes both; if your host blocks writes it shows you the exact lines to paste. - The bootstrap picks the tenant
By the requested hostname when domain mapping is on, or by the signed
stacked_site_idcookie an administrator sets when switching sites. Under WP-CLI it readsSTACKED_SITE_ID. - Prefix and paths are swapped
$table_prefixbecomesstacked_4_. In hybrid and dedicated mode the content and upload paths point atcontent/4/. - WordPress loads as usual
No patched core, no multisite tables, no shared user table. Remove the plugin and the main site is untouched.
What that buys you.
- Clones in seconds
- Cloning copies database tables and nothing else. A hybrid-mode staging copy of a 2 GB site is ready before you finish reading this sentence:
wp freighter clone main --name="Staging". - A sandbox next to production
- The original reason it exists. Clone the live site, switch into the clone from the admin bar, reproduce the problem, switch back. Administrator access is all it takes; no SFTP, no second host.
- Domain mapping
- Point any hostname at any tenant. Leave it off and tenants ride on the parent domain, reachable through the admin switcher and magic login.
- Magic login
wp freighter login 15prints a one-time URL straight into that tenant's dashboard. Same from PHP withSite::login().- Self-healing tenants
- Before switching context the plugin checks it is present and active on the target tenant and restores itself if someone deleted it from a child site.
- A CLI and a PHP API, not just a screen
- Everything the Tools page does is a
wp freightercommand and a static method onWPFreighter\Site. Script provisioning from your own tooling.
Talks to your terminal and your code.
WP-CLI
# where am I, what mode, how many tenants wp freighter info # provisioning wp freighter add --title="Client A" --name="client-a" wp freighter clone main --name="Staging" wp freighter clone 2 --name="Dev copy" wp freighter delete 4 # configuration wp freighter files set dedicated wp freighter domain set on wp freighter regenerate # any wp command, inside a tenant STACKED_SITE_ID=15 wp plugin update --all
PHP
$site = \WPFreighter\Site::create([ 'title' => 'Project Alpha', 'name' => 'alpha', 'domain' => 'alpha.example.com', // optional 'email' => 'admin@example.com', ]); // $site['stacked_site_id'] → 21 $staging = \WPFreighter\Site::clone('main', [ 'name' => 'Staging', ]); $url = \WPFreighter\Site::login(21, 'post-new.php'); \WPFreighter\Site::delete(21);
Read before you ship it.
Tenants share one install, so they share the things an install has only one of.
- Root files are shared.
.htaccess,robots.txt,wp-config.phpand the WordPress core version are the same for every tenant. - One PHP, one server, one database. Tenants are separate sites, not separate machines. Size the host for the sum of them.
- WP-Cron needs traffic. A quiet tenant's scheduled jobs wait for a visitor. Drive them with a system cron and
STACKED_SITE_ID=<id> wp cron event run --due-now. - It writes to wp-config.php and wp-content. On hosts that forbid that, you paste the bootstrap and the include line by hand. The plugin shows you both.
Built for a fleet. Run on one.
WP Freighter started in 2020 as the maintenance sandbox for Anchor Hosting's managed WordPress customers. It has hosted the company's own tool sites on a single install since then; the list at the top of this page is that install.
Six years, twenty tenants, one wp-config.php.
Install it.
- RequiresWordPress 5.4+, PHP 7.0+
- TestedWordPress 6.9
- Version1.5.1, released 2025-12-13
- LicenseMIT
- Updatesin-plugin, from GitHub releases
# from the command line wp plugin install --activate \ https://github.com/WPFreighter/wp-freighter/releases/latest/download/wp-freighter.zip # or upload the zip under Plugins → Add New, then open Tools → WP Freighter