Функция 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. Использование этой функции помогает избежать проблем с доступом и обеспечивает корректное отображение сообщений пользователям во время проведения обновлений.