wp_maintenance() WP 3.0.0

Припиняє роботу сайту та виводить повідомлення про технічні роботи (сайт у режимі розробки).

Шукає файл .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.

maintenetce2

Очевидно пов’язано це з тим, що час у змінній перевіряється з часом у БД, коли WP оновився.

Працює на основі:
wp_is_maintenance_mode()

Хуків немає.

Повертає

null. Виводить на екран текст заглушки та зупиняє роботу скрипта (сайту).

Використання

wp_maintenance();

Приклади

1

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

#2 Переводимо сайт у режим обслуговування (оновлення, розробки)

При оновленні коду на сайті рекомендується переводити сайт у режим обслуговування (заблокувати на час оновлення), щоб раптові відвідування користувачів не могли вплинути на процес оновлення файлів.

Щоб увімкнути такий режим потрібно:

Варіант 1:

Створити файл .maintenanceна корені сайту (каталог де знаходиться папка wp-admin) з наступним кодом:

<?php
// мітка часу UNIX після якого + 10 хвилин,
// сайт вийде із режиму розробки.
$upgrading = 1652995051; // time();

Варіант 2:

Створити порожній файл ABSPATH . '.maintenance'і вручну на ранньому етапі, наприклад, у файлі wp-config.php вказати глобальну змінну

// мітка часу UNIX після якого + 10 хвилин, сайт вийде з режиму розробки.
$ GLOBALS['upgrading'] = 1652995051; // time();

Готово!

Оновлюємо сторінку та бачимо повідомлення про технічне обслуговування:

Сайт ненадовго закритий технічне обслуговування. Зайдіть за хвилину.

0

#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>

При оновленні сайту, наше повідомлення про недоступність сайту буде змінено, і ми побачимо такий текст:

maintenetce

список змін

З версії 3.0.0Введено.

Код wp_maintenance() WP 6.0.2

function wp_maintenance() {
	// Return if maintenance mode is disabled.
	if ( ! wp_is_maintenance_mode() ) {
		return;
	}

	if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
		require_once WP_CONTENT_DIR . '/maintenance.php';
		die();
	}

	require_once ABSPATH. WPINC. '/functions.php';
	wp_load_translations_early();

	header( 'Retry-After: 600');

	wp_die(
		__( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ),
		__( 'Maintenance' ),
		503
	);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *