Configure multiple WordPress environments
Most web applications need more than one environment. You might have development, staging, and production, each with its own database settings. WordPress can handle that with a multi-site installation, but that did not fit the way I wanted to work.
In my case, the WordPress site was hosted on Pagoda Box. It was a good hosting option for PHP applications, but it was limited when it came to configuring WordPress. Plugins had to be installed locally and committed to the repository. I first followed their documentation to get WordPress running, but I did not like how the database connection had to be configured both locally and on Pagoda Box.
The version I ended up with checks an environment variable called ENVIRONMENT and loads the matching configuration file. It defaults to dev, so a local setup loads wp-config/wp-config.dev.php.
To make WordPress load those files, change wp-config.php to this:
php<?php/** Absolute path to the WordPress directory. */if ( !defined('ABSPATH') )define('ABSPATH', dirname(__FILE__) . '/');/** Load configuration based on the server's environment **/$env = isset($_SERVER['ENVIRONMENT']) ? $_SERVER['ENVIRONMENT'] : 'dev';require_once ABSPATH . 'wp-config/wp-config.' . strtolower($env) . '.php';/** Sets up WordPress vars and included files. */require_once(ABSPATH . 'wp-settings.php');
Now your environment configuration file can look like this, for example when connecting to a Pagoda Box database instance:
php<?php/*** The base configurations of the WordPress.** This file has the following configurations: MySQL settings, Table Prefix,* Secret Keys, WordPress Language, and ABSPATH. You can find more information* by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing* wp-config.php} Codex page. You can get the MySQL settings from your web host.** This file is used by the wp-config.php creation script during the* installation. You don't have to use the web site, you can just copy this file* to "wp-config.php" and fill in the values.** @package WordPress*/// ** MySQL settings - You can get this info from your web host ** ///** The name of the database for WordPress */define('DB_NAME', 'database_name_here');/** MySQL database username */define('DB_USER', 'username_here');/** MySQL database password */define('DB_PASSWORD', 'password_here');/** MySQL hostname */define('DB_HOST', 'localhost');/** Database Charset to use in creating database tables. */define('DB_CHARSET', 'utf8');/** The Database Collate type. Don't change this if in doubt. */define('DB_COLLATE', '');/*** Authentication Unique Keys and Salts.** Change these to different unique phrases!* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.** @since 2.6.0*/define('AUTH_KEY', 'put your unique phrase here');define('SECURE_AUTH_KEY', 'put your unique phrase here');define('LOGGED_IN_KEY', 'put your unique phrase here');define('NONCE_KEY', 'put your unique phrase here');define('AUTH_SALT', 'put your unique phrase here');define('SECURE_AUTH_SALT', 'put your unique phrase here');define('LOGGED_IN_SALT', 'put your unique phrase here');define('NONCE_SALT', 'put your unique phrase here');/*** WordPress Database Table prefix.** You can have multiple installations in one database if you give each a unique* prefix. Only numbers, letters, and underscores please!*/$table_prefix = 'wp_';/*** WordPress Localized Language, defaults to English.** Change this to localize WordPress. A corresponding MO file for the chosen* language must be installed to wp-content/languages. For example, install* de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German* language support.*/define('WPLANG', '');/*** For developers: WordPress debugging mode.** Change this to true to enable the display of notices during development.* It is strongly recommended that plugin and theme developers use WP_DEBUG* in their development environments.*/define('WP_DEBUG', false);/** Sets up WordPress vars and included files. */require_once(ABSPATH . 'wp-settings.php');