wp_get_environment_type(): string
Retrieves the current environment type.
Contents
Description
The type can be set via the WP_ENVIRONMENT_TYPE
global system variable, or a constant of the same name.
Possible values are ‘local’, ‘development’, ‘staging’, and ‘production’.
If not set, the type defaults to ‘production’.
Return
string The current environment type.
More Information
- This function allows plugin and theme authors to more easily differentiate how they handle specific functionality between production and development sites in a standardized way.
- When
development
is returned by wp_get_environment_type() ,WP_DEBUG
will be set totrue
if it is not defined in thewp-config.php
file of the site. - All hosts that support setting up staging environments are requested to set this feature to
staging
on those staging environments. Similarly, all developers with development environments shall set this value todevelopment
appropriately.
Example Usage:
switch ( wp_get_environment_type() ) {
case 'local':
case 'development':
do_nothing();
break;
case 'staging':
do_staging_thing();
break;
case 'production':
default:
do_production_thing();
break;
}
Source
File: wp-includes/load.php
.
View all references
function wp_get_environment_type() {
static $current_env = '';
if ( ! defined( 'WP_RUN_CORE_TESTS' ) && $current_env ) {
return $current_env;
}
$wp_environments = array(
'local',
'development',
'staging',
'production',
);
// Add a note about the deprecated WP_ENVIRONMENT_TYPES constant.
if ( defined( 'WP_ENVIRONMENT_TYPES' ) && function_exists( '_deprecated_argument' ) ) {
if ( function_exists( '__' ) ) {
/* translators: %s: WP_ENVIRONMENT_TYPES */
$message = sprintf( __( 'The %s constant is no longer supported.' ), 'WP_ENVIRONMENT_TYPES' );
} else {
$message = sprintf( 'The %s constant is no longer supported.', 'WP_ENVIRONMENT_TYPES' );
}
_deprecated_argument(
'define()',
'5.5.1',
$message
);
}
// Check if the environment variable has been set, if `getenv` is available on the system.
if ( function_exists( 'getenv' ) ) {
$has_env = getenv( 'WP_ENVIRONMENT_TYPE' );
if ( false !== $has_env ) {
$current_env = $has_env;
}
}
// Fetch the environment from a constant, this overrides the global system variable.
if ( defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE ) {
$current_env = WP_ENVIRONMENT_TYPE;
}
// Make sure the environment is an allowed one, and not accidentally set to an invalid value.
if ( ! in_array( $current_env, $wp_environments, true ) ) {
$current_env = 'production';
}
return $current_env;
}
Changelog
Version | Description |
---|---|
5.5.1 | Removed the ability to alter the list of types. |
5.5.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.
See case from rtCamp. They placed in
mu-plugins/non-production.php
.Setting the environment type by .htaccess or Apache configuration
# Rules to set WP_ENVIRONMENT_TYPE based on hostname
RewriteCond %{HTTP_HOST} [.]?localhost$
RewriteRule .? - [E=WP_ENVIRONMENT_TYPE:local]
RewriteCond %{HTTP_HOST} ^staging.domain.com$
RewriteRule .? - [E=WP_ENVIRONMENT_TYPE:staging]
RewriteCond %{HTTP_HOST} ^www.domain.com$
RewriteRule .? - [E=WP_ENVIRONMENT_TYPE:production]
Setting the environment type by Nginx configuration (best inside the php location)
fastcgi_param WP_ENVIRONMENT_TYPE staging;
You can turn this into various functions to use specifically in certain environments:
And then use that in your code. Example:
The return value is cached via a
static
variable, so theWP_ENVIRONMENT_TYPE
global system variable or constant must be set before the first call towp_get_environment_type()
. Otherwise, the defined environment type is not honored.