Как установить ограничение на число публикаций в WordPress

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

Почему важно ограничивать число публикаций в WordPress

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

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

Давайте рассмотрим, как реализовать это на практике.

Использование плагинов для ограничения публикаций

Плагин PublishPress Permissions

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

Чтобы установить ограничение:

  1. Установите и активируйте плагин.
  2. Перейдите в раздел «Permissions» и выберите роль пользователя.
  3. Настройте ограничения на публикации, указывая максимальное число создаваемых постов.

Однако плагин требует некоторой настройки и может быть избыточен для простых задач.

Плагин Limit Posts

Для более простой задачи есть плагин Limit Posts, который позволяет ограничить количество записей, создаваемых каждым пользователем.

Плагин ограничивает создание новых постов на уровне интерфейса админки, показывая предупреждение при достижении лимита.

Реализация ограничения через код в functions.php

Если вы хотите избежать лишних плагинов и сделать ограничение индивидуальным, можно добавить следующий код в файл functions.php вашей темы или в собственный плагин.

Приведённый пример ограничивает количество публикаций типа post для текущего пользователя, например, максимум 5 штук.

function wproot_limit_user_posts($data, $postarr) {
    if (is_admin() && $data['post_type'] === 'post' && $data['post_status'] === 'publish') {
        $user_id = get_current_user_id();
        $max_posts = 5; // Максимальное число публикаций
        
        $args = array(
            'author' => $user_id,
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => -1,
            'fields' => 'ids'
        );
        $user_posts = get_posts($args);
        
        if (count($user_posts) >= $max_posts) {
            wp_die('Достигнуто максимальное количество публикаций (' . $max_posts . '). Создание новых публикаций невозможно.');
        }
    }
    return $data;
}
add_filter('wp_insert_post_data', 'wproot_limit_user_posts', 10, 2);

Этот код проверяет при сохранении публикации, сколько уже опубликовано постов текущим пользователем. Если лимит превышен, выводит ошибку и не позволяет сохранить новую публикацию.

Как настроить ограничение для разных ролей

Чтобы установить разные лимиты для ролей, можно расширить функцию:

function wproot_limit_user_posts_by_role($data, $postarr) {
    if (is_admin() && $data['post_type'] === 'post' && $data['post_status'] === 'publish') {
        $user = wp_get_current_user();
        $role_limits = array(
            'author' => 5,
            'contributor' => 2,
            'editor' => 20
        );
        $max_posts = 0;
        foreach ($user->roles as $role) {
            if (isset($role_limits[$role])) {
                $max_posts = $role_limits[$role];
                break;
            }
        }
        if ($max_posts === 0) {
            return $data; // Без ограничения для других ролей
        }
        $args = array(
            'author' => $user->ID,
            'post_type' => 'post',
            'post_status' => 'publish',
            'posts_per_page' => -1,
            'fields' => 'ids'
        );
        $user_posts = get_posts($args);
        if (count($user_posts) >= $max_posts) {
            wp_die('Вы достигли максимального количества публикаций для вашей роли (' . $max_posts . ').');
        }
    }
    return $data;
}
add_filter('wp_insert_post_data', 'wproot_limit_user_posts_by_role', 10, 2);

В этом примере для ролей author, contributor и editor установлены разные лимиты. Для остальных ролей ограничение не действует.

Как показать пользователю информацию о лимите публикаций

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

Добавим вывод предупреждения в админке при достижении лимита:

function wproot_show_post_limit_notice() {
    $user = wp_get_current_user();
    $role_limits = array(
        'author' => 5,
        'contributor' => 2,
        'editor' => 20
    );
    $max_posts = 0;
    foreach ($user->roles as $role) {
        if (isset($role_limits[$role])) {
            $max_posts = $role_limits[$role];
            break;
        }
    }
    if ($max_posts === 0) {
        return; // Нет ограничения
    }
    $args = array(
        'author' => $user->ID,
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'fields' => 'ids'
    );
    $user_posts = get_posts($args);
    $count = count($user_posts);
    if ($count >= $max_posts) {
        echo '<div class="notice notice-error is-dismissible">Вы достигли максимального количества публикаций для вашей роли ('.$max_posts.'). Новые публикации создавать нельзя.</div>';
    } else {
        $left = $max_posts - $count;
        echo '<div class="notice notice-info is-dismissible">Осталось публикаций: '.$left.'</div>';
    }
}
add_action('admin_notices', 'wproot_show_post_limit_notice');

Этот код выводит уведомление в админке, информируя пользователя о лимите и количестве оставшихся публикаций.

Заключение и рекомендации

Ограничение числа публикаций — частая задача для сайтов с несколькими авторами. Готовые плагины, такие как PublishPress Permissions, подходят для комплексного управления правами, но если нужна лёгкая и быстрая настройка, лучше использовать кодовые решения, описанные выше.

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

Для расширения функционала можно интегрировать это ограничение с плагинами, например, WPRemark для управления комментариями или WPGPT для генерации постов с контролем качества.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить или ограничить AJAX-запросы в WordPress для повышения производительности
24.01.2026
Как удалить неиспользуемые таблицы базы данных WordPress: практическое руководство
06.01.2026
Создать динамические поля в формах регистрации WordPress с примерами
29.03.2026
Как создать автоматический подпись в email, отправляемых через WordPress
12.02.2026
Как создать собственный виджет с поддержкой AJAX в WordPress
08.04.2026
×
WordPress
прокачай свой сайт!

-20% на премиум темы и плагины

Сделай апгрейд сайта ⋙