wp_get_environment_type()Yoast 5.5.0

Получает текущий тип окружения: local, development, staging, production (по умолчанию).

Это функция стандартизирует применение разной логики кода для разной среды разработки. Так например можно выполнять один код на локалке, другой при тестировании и третий в продакшене.

Установка типа окружения

Тип окружения может быть задан двумя способами: с помощью глобальной системной переменной WP_ENVIRONMENT_TYPE или константы с таким же именем.

putenv( 'WP_ENVIRONMENT_TYPE=development' );

// или
define( 'WP_ENVIRONMENT_TYPE', 'development' );

Значение константы, переписывает значение системной переменной. Если указано значение не из списка выше, то функция вернет тип production.

При установке типа окружения development включается дебаг режим - WP_DEBUG = true.

Читайте также описание функции putenv().

1 раз — 0.000001 сек (скорость света) | 50000 раз — 0.00 сек (скорость света)

Хуков нет.

Возвращает

Строку. Текущий тип окружения:

  • local — локалка. C версии 5.5.1
  • development — разработка.
  • staging — ветка, стадия, тестирование.
  • production — рабочий сайт (по умолчанию).

Использование

wp_get_environment_type();

Примеры

0

#1 Пример из Ядра - дефолтная установка константы WP_DEBUG

if ( ! defined( 'WP_DEBUG' ) ) {
	if ( 'development' === wp_get_environment_type() ) {
		define( 'WP_DEBUG', true );
	} else {
		define( 'WP_DEBUG', false );
	}
}
0

#2 Еще демонстрационный пример

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;
}
0

#3 Закроем сайт от поисковиков, если это версия сайта для разработки

/**
 * Close from search engines indexing for dev.
 *
 * @return void
 */
function kama_development_disable_indexing(){

	// do noting it's prod OR Admin
	if(
		in_array( wp_get_environment_type(), [ 'production', 'local' ], true )
		||
		current_user_can( 'administrator' )
	){
		return;
	}

	// HTTP header
	header( 'X-Robots-Tag: noindex' );

	// robots.txt
	add_filter( 'robots_txt', fn() => "User-agent: *\nDisallow: /", 999 );

	// <meta name='robots' content='noindex, follow' />
	add_filter( 'wp_robots', function( $robots ){
		$robots['noindex'] = true;
		$robots['nofollow'] = true;
		unset( $robots['follow'] );

		return $robots;
	}, 999 );

	// 403 for search agents
	$robots = 'libwww|Wget|LWP|damnBot|BBBike|spider|crawl|google|bing|yandex|msnbot';
	if( preg_match( "/$robots/i", $_SERVER['HTTP_USER_AGENT'] ) ) {
		http_response_code( 403 );
		die( 'Public Forbidden' );
	}

}

Теперь просто вызывает эту функцию где-то в плагине или в файле fucntions.php:

kama_development_disable_indexing();

Код wp_get_environment_type() Yoast 19.11

function wp_get_environment_type() {
	static $current_env = '';

	if ( $current_env ) {
		return $current_env;
	}

	$wp_environments = [
		'local',
		'development',
		'staging',
		'production',
	];

	// Check if the environment variable has been set, if `getenv` is available on the system.
	if ( function_exists( 'getenv' ) ) {
		$has_env = getenv( 'WP_ENVIRONMENT_TYPES' );
		if ( $has_env !== false ) {
			$wp_environments = explode( ',', $has_env );
		}
	}

	// Fetch the environment types from a constant, this overrides the global system variable.
	if ( defined( 'WP_ENVIRONMENT_TYPES' ) ) {
		$wp_environments = WP_ENVIRONMENT_TYPES;
	}

	// 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 ( $has_env !== false ) {
			$current_env = $has_env;
		}
	}

	// Fetch the environment from a constant, this overrides the global system variable.
	if ( defined( '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;
}