Как создать настройку для отключения блокировки контента в WordPress

В некоторых случаях владельцы сайтов на WordPress сталкиваются с необходимостью блокировки части контента для определённых пользователей или групп. Но иногда возникает задача, когда нужно быстро и удобно отключать такую блокировку без изменения кода или сложных манипуляций. В этой статье рассмотрим, как создать кастомную настройку в админке WordPress, которая позволит включать и отключать блокировку контента с помощью простого переключателя.

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

Блокировка контента часто реализуется через плагины или кастомный код, который скрывает часть страницы от гостей или подписчиков. Но бывают ситуации, когда временно необходимо снять ограничение — например, для проведения акции, тестирования или устранения проблем с доступом. Ручные правки кода или выключение плагинов — не всегда удобный и безопасный способ.

Создание отдельной настройки в панели администратора избавит от лишних сложностей и позволит быстро управлять блокировкой без риска сломать сайт.

Кроме того, такая настройка — хороший пример расширения возможностей темы или плагина, который можно легко адаптировать под свои нужды.

Создание опции в настройках WordPress

Для начала добавим новую страницу настроек и зарегистрируем параметр, который будет хранить состояние блокировки контента (включена или отключена).

В functions.php темы или в своем плагине добавьте следующий код:

<?php
// Добавляем страницу настроек в меню «Настройки»
add_action('admin_menu', 'wplesson_add_settings_page');
function wplesson_add_settings_page() {
    add_options_page(
        'Настройка блокировки контента',
        'Блокировка контента',
        'manage_options',
        'wplesson-content-lock',
        'wplesson_render_settings_page'
    );
}

// Рендерим страницу настроек
function wplesson_render_settings_page() {
    ?>
    <div class="wrap"><h1>Настройка блокировки контента</h1>
    <form method="post" action="options.php">
        <?php
        settings_fields('wplesson_content_lock_group');
        do_settings_sections('wplesson-content-lock');
        submit_button();
        ?>
    </form>
    </div>
    <?php
}

// Регистрируем опцию и поле
add_action('admin_init', 'wplesson_register_settings');
function wplesson_register_settings() {
    register_setting('wplesson_content_lock_group', 'wplesson_content_lock_enabled');

    add_settings_section(
        'wplesson_content_lock_section',
        'Настройки блокировки',
        null,
        'wplesson-content-lock'
    );

    add_settings_field(
        'wplesson_content_lock_enabled',
        'Включить блокировку контента',
        'wplesson_content_lock_enabled_render',
        'wplesson-content-lock',
        'wplesson_content_lock_section'
    );
}

// Рендерим чекбокс
function wplesson_content_lock_enabled_render() {
    $option = get_option('wplesson_content_lock_enabled');
    ?>
    <input type="checkbox" name="wplesson_content_lock_enabled" value="1" <?php checked(1, $option, true); ?> />
    <?php
}
?>

Этот код создаёт в меню «Настройки» новую страницу «Блокировка контента» с одним переключателем.

Использование настройки в коде для блокировки контента

Теперь можно использовать значение опции wplesson_content_lock_enabled в любом месте сайта для управления блокировкой. Например, добавим функцию, которая выводит контент или сообщение о блокировке в зависимости от настройки и статуса пользователя.

<?php
function wplesson_the_content_with_lock($content) {
    // Проверяем, включена ли блокировка
    $lock_enabled = get_option('wplesson_content_lock_enabled');

    // Если блокировка выключена или пользователь авторизован, показываем контент
    if (!$lock_enabled || is_user_logged_in()) {
        return $content;
    }

    // Иначе показываем сообщение
    return '<p>Этот контент доступен только зарегистрированным пользователям.</p>';
}

// Подключаем фильтр к контенту записей
add_filter('the_content', 'wplesson_the_content_with_lock');
?>

Таким образом, при включённой настройке блокировки гости сайта увидят сообщение вместо основного контента.

Расширение: добавляем выбор ролей пользователей для разблокировки

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

Для этого добавим мультиселект с ролями на страницу настроек и модифицируем функцию проверки.

Добавьте в wplesson_register_settings() поле:

add_settings_field(
    'wplesson_content_lock_roles',
    'Роли пользователей с доступом',
    'wplesson_content_lock_roles_render',
    'wplesson-content-lock',
    'wplesson_content_lock_section'
);

register_setting('wplesson_content_lock_group', 'wplesson_content_lock_roles', [
    'type' => 'array',
    'sanitize_callback' => 'wplesson_sanitize_roles',
]);

function wplesson_content_lock_roles_render() {
    $roles = get_editable_roles();
    $selected = get_option('wplesson_content_lock_roles', []);
    ?>
    <select name="wplesson_content_lock_roles[]" multiple size="5">
        <?php foreach ($roles as $role_key => $role_data) : ?>
            <option value="<?php echo esc_attr($role_key); ?>" <?php echo in_array($role_key, $selected) ? 'selected' : ''; ?>><?php echo esc_html($role_data['name']); ?></option>
        <?php endforeach; ?>
    </select>
    <p class="description">Выберите роли, которым будет разрешён доступ к контенту при блокировке.</p>
    <?php
}

function wplesson_sanitize_roles($input) {
    $roles = array_keys(get_editable_roles());
    return array_intersect($input, $roles);
}

И в функции проверки контента изменим условие:

function wplesson_the_content_with_lock($content) {
    $lock_enabled = get_option('wplesson_content_lock_enabled');
    $allowed_roles = get_option('wplesson_content_lock_roles', []);

    if (!$lock_enabled) {
        return $content;
    }

    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        foreach ($allowed_roles as $role) {
            if (in_array($role, (array) $user->roles)) {
                return $content;
            }
        }
    }

    return '<p>Этот контент доступен только зарегистрированным пользователям с разрешёнными ролями.</p>';
}

Использование плагинов для блокировки контента с управлением из настроек

Если вы предпочитаете готовые решения, обратите внимание на плагин Clearfy Pro. В нём есть расширенные возможности управления видимостью контента для разных групп пользователей и удобные настройки, которые можно адаптировать под задачи блокировки.

Ещё один вариант — WPCommunity, если вы хотите сделать законтент доступным только для участников сообщества с гибкими настройками прав доступа.

Итоги и рекомендации

Создание кастомной настройки для включения и отключения блокировки контента — полезный инструмент для администраторов сайтов. Такой подход позволяет без риска и сложностей управлять доступом к материалам, быстро включать или снимать ограничения.

Используйте предложенный код как основу и расширяйте его под свои нужды: добавляйте фильтры, интегрируйте с плагинами, улучшайте интерфейс настроек.

Если хотите максимально упростить задачу, используйте готовые решения с WPSHOP — там много полезных инструментов для управления контентом и доступом.

Как использовать внешние шаблоны для WooCommerce без конфликтов
09.05.2026
Как создать автоматический sitemap в WordPress с помощью кода и плагина
04.03.2026
Как удалить базовые виджеты WordPress без ошибок и конфликтов
05.05.2026
Как избежать проблем с кэшированием в WordPress: практические советы
05.04.2026
Как создать производительный каскадный выбор в WordPress с помощью AJAX
05.01.2026