I guess you’re talking about a site specific wp-config.php
file that resides in your themes folder.
At the point where you’re loading the wp-config.php
file, WP isn’t fully loaded, so you ain’t got any constants or filesystem API or other basic API functions available.
Here’s how I approach this:
Structure
# Dir structure
~/ROOT
├── config
├── wp-content
│ ├── themes
│ └── plugins
│ └── mu-plugins
Inside the config
folder, I got all config files that are site specific. To identify them easily, they’re named after the domains they’re used on.
The wp-config.php
# Config file suffix
! empty( $_SERVER['SERVER_NAME'] ) AND $suffix = $_SERVER['SERVER_NAME'];
! isset( $suffix ) AND ! empty( $_SERVER['HTTP_HOST'] ) AND $suffix = $_SERVER['HTTP_HOST'];
# CONFIG FILE PATH: Sub of root ~/config
$config_path = dirname( __FILE__ ).DS.'config';
// inside wp-config.php
# LOAD CONFIG FILE
// local
if ( file_exists( "{$config_path}/_local.php" ) )
{
require( "{$config_path}/_local.php" );
}
// Stage
elseif ( file_exists( "{$config_path}/{$suffix}-stage.php" ) )
{
require( "{$config_path}/{$suffix}-stage.php" );
}
// Production
elseif ( file_exists( "{$config_path}/{$suffix}.php" ) )
{
require( "{$config_path}/{$suffix}.php" );
}
unset( $suffix, $config_path );
Explanation and drawbacks
DS
is just a short constant made to wrap DIRECTORY_SEPARATOR
. As I use it in lots of places and like to hold my lines short, I set it.
So the $suffix
is what I retrieve from the SERVER_NAME
or the HTTP_HOST
. The point is that you can’t be sure which one is set. Therefore I’m testing both.
The $config_path
simply is the path of the current file + a folder named config
on level below it.
The files themselves are named example.com.php
. So I can find them easily by just identifying the domain and I’m done. This helps keeping things clean.
The first check that I do is for a _local.php
file which holds my local configuration. I skip that step by deleting those lines for files I use on servers. It’s just there to let my local setup run.
The second check is for the stage
file. This will also get deleted on production sites.
I hope this helps other people avoiding things like the setup shown here.