Вопрос или проблема
Я хочу перевести сайт в режим обслуживания без использования плагина, чтобы любой, кто получает доступ к сайту и не является администратором сайта, видел страницу с сообщением “извините, сайт на обслуживании”.
Я создал файл .maintenance с приведенным ниже кодом:
<?php
function is_user_logged_in() {
$loggedin = false;
foreach ( (array) $_COOKIE as $cookie => $value ) {
if ( stristr($cookie, 'wordpress_logged_in_') )
$loggedin = true;
}
return $loggedin;
}
if ( ! stristr($_SERVER['REQUEST_URI'], '/wp-admin') &&
! stristr($_SERVER['REQUEST_URI'], '/wp-login.php') &&
! is_user_logged_in() )
$upgrading = time();
?>
Я также настроил файл maintenance.php с контентом страницы и установил его в wp-content.
Таким образом, это работало хорошо, но проблема в том, что любой, кто уже вошел на сайт, может просматривать сайт. Поскольку это сайт электронной коммерции, часто у клиентов установлены куки, но я не хочу, чтобы они могли использовать сайт, пока он на обслуживании.
Я не разработчик, поэтому не знаю, как исправить приведенный выше код, чтобы только администраторы могли обходить режим обслуживания.
Может кто-то помочь мне?
Редактировать:
Я собираюсь использовать это в начале Черной пятницы, чтобы обновить цены в магазине, и моя цель состоит в том, чтобы загрузить как можно меньше WordPress, когда люди приходят на сайт, чтобы не перегружать сервер. В предыдущие годы сайт не справлялся с большим объемом одновременных пользователей, пытаясь активировать акции, и в этом году, помимо других действий, я хочу предотвратить влияние людей, которые постоянно обновляют страницу, на производительность WordPress.
На мой взгляд, метод с файлом .maintenance заставляет пользователя загрузить очень мало ресурсов WordPress. Но, пожалуйста, исправьте меня, если я не прав.
Только администраторы, уже вошедшие в систему, будут иметь доступ к сайту, никто другой. Просто измените переменную $url на ваш URL, где находится желаемая страница обслуживания.
function wp_maintenance_mode() {
if (!current_user_can('administrator')) {
$url = "ваш URL файла обслуживания, который вы хотите отображать, пока он на обслуживании";
wp_redirect( $url );
exit;
}
add_action('get_header', 'wp_maintenance_mode');
если вы просто хотите отобразить сообщение, просто уберите перенаправление и выведите что-то
function wp_maintenance_mode() {
if (!current_user_can('administrator')) {
wp_die('<h1>На обслуживании</h1><br />Сайт на плановом обслуживании. Пожалуйста, проверьте позже.');
}
}
add_action('get_header', 'wp_maintenance_mode');
Ответ или решение
Режим обслуживания без доступа для пользователей, не являющихся администраторами
Ваша задача заключается в том, чтобы установить режим обслуживания на сайте, чтобы пользователи, не являющиеся администраторами, видели страницу "Извините, сайт на обслуживании". При этом вам не нужно использовать плагины, а решение должно обеспечивать минимальную загрузку ресурсов WordPress.
Реализация режима обслуживания
Чтобы достичь данной цели, вы можете использовать функцию, которая проверяет, является ли текущий пользователь администратором, и перенаправляет пользователей, если это не так. Давайте разберем предложенный подход, который вы можете использовать.
Шаг 1: Создание функции для проверки пользователя
Вам нужно добавить следующий код в файл functions.php
вашей темы. Этот код будет проверять, является ли пользователь администратором, и в случае, если это не так, будет показывать сообщение о техническом обслуживании.
function wp_maintenance_mode() {
if (!current_user_can('administrator')) {
// Замените URL на ваш адрес страницы обслуживания
wp_die('<h1>На сайте ведется обслуживание</h1><br />Пожалуйста, вернитесь позже.');
}
}
add_action('get_header', 'wp_maintenance_mode');
Шаг 2: Настройка сообщений
Вы можете изменить текст в функции wp_die()
, чтобы он соответствовал вашим нуждам. Например, вы можете добавить дополнительную информацию о сроках обслуживания или поддержку.
Шаг 3: Настройка внешнего вида страницы
Если вы хотите, чтобы при переходе на сайт отображалась кастомизированная страница с сообщением о техническом обслуживании, можно создать отдельный файл шаблона и использовать его. Вот пример, как это можно сделать:
function wp_maintenance_mode() {
if (!current_user_can('administrator')) {
include( get_template_directory() . '/maintenance.php' );
exit;
}
}
add_action('get_header', 'wp_maintenance_mode');
Убедитесь, что файл maintenance.php
находится в вашей теме и содержит необходимый HTML-код для отображения страницы обслуживания.
Переход на режим обслуживания
После завершения внедрения кода, при необходимости, вы можете активировать режим обслуживания, добавив его в файл functions.php
.
Также стоит отметить, что использование wp_die()
позволяет не загружать ничего лишнего, так как WordPress не будет загружать CSS, JS, или дополнительные ресурсы, что действительно разгрузит сервер, особенно в дни активных продаж, такие как Черная пятница.
Заключение
С помощью вышеуказанного кода вы сможете реализовать режим обслуживания на вашем сайте, ограничив доступ только для администраторов. Подобный подход не только позволит вам контролировать нагрузку на сервер в пиковые моменты, но также будет удобен для пользователей, которые получили точное сообщение об обслуживании. Удачи вам с обновлениями вашего интернет-магазина!