wp_get_environment_type()
Получает текущий тип окружения: local, development, staging, production (по умолчанию).
Это функция стандартизирует применение разной логики кода для разной среды разработки. Так, например, можно выполнять один код на локалке, другой - при тестировании, и третий - в продакшене.
Эта функция подключается на самом раннем этапе загрузки и может быть исползована до любого хука и даже в среде SHORTINIT.
Установка типа окружения
Тип окружения может быть задан двумя способами: с помощью глобальной системной переменной WP_ENVIRONMENT_TYPE или константы с таким же именем.
putenv( 'WP_ENVIRONMENT_TYPE=development' ); // или define( 'WP_ENVIRONMENT_TYPE', 'development' );
Возможные значения константы:
local
— локалка. C версии 5.5.1development
— разработка.staging
— ветка, стадия, тестирование.production
— рабочий сайт (по умолчанию).
Значение константы имеет больший приоритет над значением системной переменной.
Если указано значение не из списка выше, то функция вернет тип production
.
При установке типа окружения development
включается дебаг режим - WP_DEBUG = true
. Если константа WP_DEBUG не установлена. См. wp_initial_constants().
Читайте также описание функции putenv().
Кроме режима окружения, в Wodpress также можно задать режим разработки: wp_is_development_mode().
Хуков нет.
Возвращает
Строку
. Текущий тип окружения.
Использование
wp_get_environment_type();
Примеры
#1 Пример из Ядра - дефолтная установка константы WP_DEBUG
if ( ! defined( 'WP_DEBUG' ) ) { if ( 'development' === wp_get_environment_type() ) { define( 'WP_DEBUG', true ); } else { define( 'WP_DEBUG', false ); } }
#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; }
#3 Закроем сайт от поисковиков, если это версия сайта для разработки
Как запретить индексацию сайта поисковиками, если это версия сайта для разработки (DEV копия сайта).
Очень часто у сайта есть две или три версии в сети ДЕВ и ПРОД (иногда еще и STAGE). ДЕВ версию всегда нужно закрывать от индексации, делается это по-разному. Не редко видел как её закрывают паролем через .htpasswd, однако это не всегда удобно. Гораздо удобнее использовать следующих код, чтобы закрыть сайт от индексации:
/** * Close from search engines indexing for dev, stage environment. * * @version 1.0 */ final class WP_Kama_Disable_Dev_Env_Indexing { public static function init(): void { add_action( 'init', [ __CLASS__, 'disable_indexing' ] ); } public static function disable_indexing(): void { if( ! self::is_blocking_on() ){ return; } self::block_search_agents(); add_filter( 'wp_headers', [ __CLASS__, '_HTTP_header' ] ); add_filter( 'robots_txt', [ __CLASS__, '_robots_txt' ] ); // Not recommended. In order to have the same behaviour as on prod # add_filter( 'wp_robots', [ __CLASS__, '_robots_meta_tag' ], 999 ); } /** * Checks whether we should disable indexing. */ private static function is_blocking_on(): bool { if( in_array( wp_get_environment_type(), [ 'production', 'local' ], true ) ){ return false; } if( current_user_can( 'administrator' ) ){ return false; } return true; } /** * 403 response for search agents. */ private static function block_search_agents(): void { $robots = 'libwww|Wget|LWP|damnBot|BBBike|spider|crawl|google|bing|yandex|msnbot'; $user_agent = ( $_SERVER['HTTP_USER_AGENT'] ?? '' ); if( preg_match( "/$robots/i", $user_agent ) ) { http_response_code( 403 ); die( 'Indexing of this site is Forbidden for robots.' ); } } public static function _HTTP_header( array $headers ): array { $headers['X-Robots-Tag'] = 'noindex, nofollow'; return $headers; } public static function _robots_txt(): string { return "User-agent: *\nDisallow: /"; } /** * Callback for hook `wp_robots`. * Adds `<meta name='robots' content='noindex, follow' />` HTML meta tag. */ public static function _robots_meta_tag( array $robots ): array { $robots['noindex'] = true; $robots['nofollow'] = true; unset( $robots['follow'] ); return $robots; } }
Теперь просто вызываем эту функцию где угодно: в мю-плагине, плагине или в файле functions.php:
WP_Kama_Disable_Dev_Env_Indexing::init();
ВАЖНО! Для этого кода вам нужно указать константу WP_ENVIRONMENT_TYPE в wp-config.php. Значение константы должно быть разное на разных энвах.
Список изменений
С версии 5.5.0 | Введена. |
С версии 5.5.1 | Added the 'local' type. |
С версии 5.5.1 | Removed the ability to alter the list of types. |