Режим обслуживания, исключая администраторов сайта

Вопрос или проблема

Я хочу перевести сайт в режим обслуживания без использования плагина, чтобы любой, кто получает доступ к сайту и не является администратором сайта, видел страницу с сообщением “извините, сайт на обслуживании”.

Я создал файл .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, или дополнительные ресурсы, что действительно разгрузит сервер, особенно в дни активных продаж, такие как Черная пятница.

Заключение

С помощью вышеуказанного кода вы сможете реализовать режим обслуживания на вашем сайте, ограничив доступ только для администраторов. Подобный подход не только позволит вам контролировать нагрузку на сервер в пиковые моменты, но также будет удобен для пользователей, которые получили точное сообщение об обслуживании. Удачи вам с обновлениями вашего интернет-магазина!

Оцените материал
Добавить комментарий

Капча загружается...