Функция wp_maintenance() в WordPress предназначена для активации режима обслуживания сайта. Этот режим позволяет временно сделать сайт недоступным для посетителей, пока вы проводите обновления или технические работы.
wp_maintenance()
Описание
Функция wp_maintenance() не является частью официального API WordPress и используется для отображения страницы, информирующей о техническом обслуживании. Она работает на основе файла .maintenance, который должен находиться в корневом каталоге установки WordPress, рядом с папкой wp-admin.
Файл .maintenance содержит переменную $upgrading, значение которой указывает на время, когда файл был создан. Это время представлено в формате Unix-времени. Если файл .maintenance был создан менее 10 минут назад, WordPress покажет страницу режима обслуживания.
Функция выполняется на ранней стадии загрузки WordPress, до определения константы SHORTINIT.
Пример 1: Создание функции для включения и отключения режима обслуживания
Поскольку в WordPress нет стандартной функции для управления режимом обслуживания, вы можете создать свою собственную функцию для включения и отключения этого режима:
<?php /**
 * Активирует или деактивирует режим технического обслуживания в WordPress.
 *
 * @param string $state 'activate' | 'deactivate'
 *
 * @return void
 */
function genius_enable_maintenance_mode( $state = 'activate' ) {
    global $wp_filesystem;
    // Проверка, инициализирован ли файловый доступ.
    if ( ! $wp_filesystem ) {
        require_once ABSPATH . 'wp-admin/includes/file.php';
        WP_Filesystem();
        // Проверка метода файлового доступа.
        if ( 'direct' !== $wp_filesystem->method ) {
            /** @noinspection ForgottenDebugOutputInspection */
            wp_die( 'WP_Filesystem требует метода direct.' );
        }
    }
    $maintenance_path = $wp_filesystem->abspath() . '.maintenance';
    // Установка файла для режима технического обслуживания.
    if ( 'activate' === $state ) {
        $timestamp = time() + 600; // Устанавливаем время выхода из режима через 10 минут.
        $content = "<?php\n\$upgrading = $timestamp;\n?>";
        // Удаляем файл, если он существует, и создаем новый с актуальными данными.
        $wp_filesystem->delete( $maintenance_path );
        $wp_filesystem->put_contents( $maintenance_path, $content );
    } 
    // Удаление файла режима технического обслуживания.
    else {
        if ( $wp_filesystem->exists( $maintenance_path ) ) {
            $wp_filesystem->delete( $maintenance_path );
        }
    }
} ?>
Пример использования функции:
genius_enable_maintenance_mode( 'activate' ); // Включение режима обслуживания
sleep(10); // Симуляция некоторых действий
genius_enable_maintenance_mode( 'deactivate' ); // Отключение режима обслуживания
Пример 2: Перевод сайта в режим обслуживания
Когда вы обновляете код сайта, рекомендуется переводить сайт в режим обслуживания, чтобы избежать проблем, связанных с одновременным доступом посетителей.
Вариант 1:
Создайте файл .maintenance в корне сайта со следующим содержимым:
<?php
// Метка времени UNIX, по истечении которой сайт выйдет из режима обслуживания.
$upgrading = time() + 600; // Текущая метка времени + 10 минут
Вариант 2:
Создайте пустой файл ABSPATH . '.maintenance' и в файле wp-config.php добавьте:
// Метка времени UNIX, по истечении которой сайт выйдет из режима обслуживания.
$GLOBALS['upgrading'] = time() + 600; // Текущая метка времени + 10 минут
После этого, при обновлении страницы, пользователи увидят сообщение о техническом обслуживании.
Пример 3: Изменение текста сообщения о техническом обслуживании
Чтобы изменить стандартное сообщение о техническом обслуживании, создайте файл maintenance.php в директории wp-content со следующим содержимым:
<?php
wp_load_translations_early();
$protocol = $_SERVER["SERVER_PROTOCOL"];
if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol )
    $protocol = 'HTTP/1.0';
header( "$protocol 503 Service Unavailable", true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
header( 'Retry-After: 600' );
// Большинство функций WP не работают в этом режиме.
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"<?php if ( is_rtl() ) echo ' dir="rtl"'; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Техническое обслуживание</title>
</head>
<body>
    <div style="max-width:800px; margin:50px auto; text-align:center;">
        <h1>Сайт находится на техническом обслуживании, работа будет восстановлена через несколько минут.</h1>
        <h2>Извините за неудобства.</h2>
    </div>
</body>
</html>
Когда сайт будет находиться в режиме обслуживания, пользователи увидят сообщение, которое вы указали в maintenance.php.
Дополнительная информация
Функция wp_maintenance() не рекомендуется использовать напрямую в вашем коде, так как она предназначена для внутреннего использования ядром WordPress. Для управления режимом обслуживания рекомендуется использовать созданные вами функции или методы.
Функция работает на основе wp_is_maintenance_mode(), но сама по себе не предоставляет хуков для модификации. Рекомендуется для включения и отключения режима обслуживания использовать методы, описанные выше.
Заключение
Функция wp_maintenance() позволяет эффективно управлять режимом технического обслуживания вашего сайта WordPress. Использование этой функции помогает избежать проблем с доступом и обеспечивает корректное отображение сообщений пользователям во время проведения обновлений.