wp_maintenance()
Припиняє роботу сайту та виводить повідомлення про технічні роботи (сайт у режимі розробки).
Шукає файл .maintenance
у корені WordPress (поряд із папкою wp-admin , зазвичай це корінь сайту). Цей файл містить змінну $upgrading
з даними, коли він був створений. Якщо файл створено менше 10 хвилин тому, WP виведе повідомлення про технічне обслуговування сайту. Час $upgrading вказується у форматі unix ( 1374363082 ).
Зазвичай, цей функціонал використовується під час оновлення сайту. Але його можна «прикрутити» до інших випадків, коли потрібно, щоб сайт був у недоступному для перегляду режимі. Наприклад, при «живому» оновленні коду, щоб код випадково не був запущений візитом відвідувача.
Можна змінити текст заглушки за замовчуванням. Для цього потрібно створити файл maintenance.php
у директорії wp-content . У цьому файлі потрібно описати сторінку-заглушку за всіма правилами HTML.
Функція спрацьовує на дуже ранній стадії завантаження WordPress, до константи SHORTINIT .
Якщо час минув, але глобальна змінна $upgrading вказана в .maintenance , то в адмін-панелі WP з’являється повідомлення:
Під час автоматизованого WordPress update буде зроблено досконало – сприйняти update again now.
Очевидно пов’язано це з тим, що час у змінній перевіряється з часом у БД, коли WP оновився.
wp_is_maintenance_mode()
Хуків немає.
Повертає
null
. Виводить на екран текст заглушки та зупиняє роботу скрипта (сайту).
Використання
wp_maintenance();
Приклади
#1 Функція увімкнення та вимкнення режиму розробки
За умовчанням такої функції WordPress немає. Тому давайте напишемо свою функцію, яка дозволить зручно включити та відключати режим техобслуговування сайту:
/** * Enables or Disables the WP maintenance mode. * * @param string $action 'on' | 'off' * * @return void */ function wpkama_wp_maintenance_mode( $action = 'on' ){ 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 потрібний для прямого типу.' ); } } $maintenance_file = $wp_filesystem->abspath() . '.maintenance'; // Create maintenance file to signal that we are upgrading. if( 'on' === $action ){ $maintenance_string = sprintf( '<?php $upgrading = %d; ?>', time() ); $wp_filesystem->delete( $maintenance_file ); $wp_filesystem->put_contents( $maintenance_file, $maintenance_string ); } // Remove maintenance file, we're done with potential site-breaking changes. else { $wp_filesystem->delete( $maintenance_file ); } }
Приклад використання функції:
wpkama_wp_maintenance_mode('on'); sleep(6); // симулюємо якісь дії wpkama_wp_maintenance_mode('off');
#2 Переводимо сайт у режим обслуговування (оновлення, розробки)
При оновленні коду на сайті рекомендується переводити сайт у режим обслуговування (заблокувати на час оновлення), щоб раптові відвідування користувачів не могли вплинути на процес оновлення файлів.
Щоб увімкнути такий режим потрібно:
Варіант 1:
Створити файл .maintenance
на корені сайту (каталог де знаходиться папка wp-admin) з наступним кодом:
<?php // мітка часу UNIX після якого + 10 хвилин, // сайт вийде із режиму розробки. $upgrading = 1652995051; // time();
Варіант 2:
Створити порожній файл ABSPATH . '.maintenance'
і вручну на ранньому етапі, наприклад, у файлі wp-config.php вказати глобальну змінну
// мітка часу UNIX після якого + 10 хвилин, сайт вийде з режиму розробки. $ GLOBALS['upgrading'] = 1652995051; // time();
Готово!
Оновлюємо сторінку та бачимо повідомлення про технічне обслуговування:

#3 Змінимо текст повідомлення:
Створимо файл /wp-content/maintenance.php
із таким кодом:
<?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>
При оновленні сайту, наше повідомлення про недоступність сайту буде змінено, і ми побачимо такий текст:
список змін
З версії 3.0.0 | Введено. |