wp_maintenance

Прекращает работу сайта и выводит сообщение о технических работах (сайт в режиме разработки).

Ищет файл .maintenance в корне WordPress (рядом с папкой wp-admin, обычно это корень сайта). Этот файл содержит переменную $upgrading, с данными, когда он был создан. Если файл был создан меньше 10 минут назад, WP выведет сообщение о техническом обслуживании сайта. Время в $upgrading указывается в формате unix (1374363082).

Обычно этот функционал используется во время обновления сайта. Но его можно «прикрутить» к другим случаям, когда нужно чтобы сайт находился в недоступном для просмотра режиме. Например при «живом» обновлении кода, чтобы код случайно не был запущен визитом посетителя.

Текст заглушки по умолчанию можно заменить. Для этого нужно создать файл maintenance.php в директории wp-content. В этом файле нужно описать страницу-заглушку по всем правилам HTML.

Функция срабатывает на очень ранней стадии загрузки WordPress, до константы SHORTINIT.
Хуки из функции:
enable_maintenance_mode
Возвращает

Выводит на экран текст заглушки и останавливает работу скрипта (сайта).

Использование

wp_maintenance();

Примеры

#1. Переводим сайт в режим разработки

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

<?php
$upgrading = 1422567883;
// 1422567883 - метка времени UNIX по истечению которого и еще 10 минут, 
// сайт выйдет из режима разработки.

// Переменную $upgrading ($GLOBALS['upgrading']) можно указать 
// не только тут, а где-либо еще, т.к. она глобальная. 
// Но делать это нужно на ранней стадии, например в файле wp-config.php

Перезагружаем сайт и видим сообщение о техническом обслуживании:

Сайт ненадолго закрыт на техническое обслуживание. Зайдите через минуту.

#2. Изменим текст сообщения:

Создадим файл /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

Заметки

Если время истекло, но глобальная переменная $upgrading указан в .maintenance, то в админ-панели WP появляется сообщение:

An automated WordPress update has failed to complete – please attempt the update again now.

maintenetce2

Видимо связано это с тем, что время в переменной проверяется с временем в БД, когда WP обновился…

Код из


wp-includes/load.php

WP 4.7.2

<?php
function wp_maintenance() {
	if ( ! file_exists( ABSPATH . '.maintenance' ) || wp_installing() )
		return;

	global $upgrading;

	include( ABSPATH . '.maintenance' );
	// If the $upgrading timestamp is older than 10 minutes, don't die.
	if ( ( time() - $upgrading ) >= 600 )
		return;

	/**
	 * Filters whether to enable maintenance mode.
	 *
	 * This filter runs before it can be used by plugins. It is designed for
	 * non-web runtimes. If this filter returns true, maintenance mode will be
	 * active and the request will end. If false, the request will be allowed to
	 * continue processing even if maintenance mode should be active.
	 *
	 * @since 4.6.0
	 *
	 * @param bool $enable_checks Whether to enable maintenance mode. Default true.
	 * @param int  $upgrading     The timestamp set in the .maintenance file.
	 */
	if ( ! apply_filters( 'enable_maintenance_mode', true, $upgrading ) ) {
		return;
	}

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

	wp_load_translations_early();

	$protocol = wp_get_server_protocol();
	header( "$protocol 503 Service Unavailable", true, 503 );
	header( 'Content-Type: text/html; charset=utf-8' );
	header( 'Retry-After: 600' );
?>
	<!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><?php _e( 'Maintenance' ); ?></title>

	</head>
	<body>
		<h1><?php _e( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ); ?></h1>
	</body>
	</html>
<?php
	die();
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *