Как использовать функцию WP_GET_ENVIRONMENT_TYPE() в WordPress

# WP_GET_ENVIRONMENT_TYPE() │ WP 5.5.0

Функция WP_GET_ENVIRONMENT_TYPE() позволяет получить текущий тип среды, в которой работает ваш сайт на WordPress. Это может быть полезно при разработке, тестировании и на этапе запуска.

## Что такое тип среды?

Тип среды — это категория, которая определяет, в каком режиме работает ваш сайт. Существует несколько типов среды:

- **local** — локальная среда (например, когда вы рабо��аете на своем компьютере).
- **development** — среда разработки (например, тестовая версия сайта).
- **staging** — промежуточная среда (например, тестовая версия перед запуском).
- **production** — рабочая среда (окончательная версия сайта, доступная для пользователей).

Если тип не установлен, по умолчанию используется значение **production**.

## Использование функции

Для получения текущего типа среды вы можете использовать следующую функцию:

```php
wp_get_environment_type();

Возвращаемое значение

Функция возвращает строку, которая указывает текущий тип среды.

Примеры использования

Пример 1: Установка WP_DEBUG на основе типа среды

Следующий код устанавливает значение 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: Закрытие сайта от индексации в поисковых системах

Если ваш сайт находится в стадии разработки, можно отключить индексацию его поисковыми системами. Вот как это сделать:

/**
 * Закрывает сайт от индексации поисковыми системами в режиме разработки.
 *
 * @return void
 */
function kama_development_disable_indexing(){
    // Если это рабочая версия или администратор
    if( in_array( wp_get_environment_type(), ['production', 'local'], true) || current_user_can( 'administrator' ) ){
        return;
    }

    // Установка HTTP заголовка
    header( 'X-Robots-Tag: noindex' );

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

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

        return $robots;
    }, 999 );

    // Ответ 403 для поисковых агентов
    $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' );
    }
}

Этот код можно вызвать в своем плагине или в файле functions.php:

kama_development_disable_indexing();

Изменения с версии 5.5.0

  • 5.5.0 — Введена функция.
  • 5.5.1 — Добавлен тип 'local'.
  • 5.5.1 — Убрана возможность изменять список типов.

Код функции

Вот код, который используется в функции wp_get_environment_type():

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');

    if (defined('WP_ENVIRONMENT_TYPES') && function_exists('_deprecated_argument')) {
        $message = sprintf( 'Константа %s больше не поддерживается.', 'WP_ENVIRONMENT_TYPES' );
        _deprecated_argument('define()', '5.5.1', $message);
    }

    if (function_exists('getenv')) {
        $has_env = getenv('WP_ENVIRONMENT_TYPE');
        if (false !== $has_env) {
            $current_env = $has_env;
        }
    }

    if (defined('WP_ENVIRONMENT_TYPE') && WP_ENVIRONMENT_TYPE) {
        $current_env = WP_ENVIRONMENT_TYPE;
    }

    if (!in_array($current_env, $wp_environments, true)) {
        $current_env = 'production';
    }

    return $current_env;
}

Теперь вы знаете, как использовать и интегрировать функцию WP_GET_ENVIRONMENT_TYPE() в ваш WordPress проект!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *