В некоторых проектах на WordPress возникает необходимость ограничить число публикаций, которые может создавать пользователь определенной роли. Например, если на сайте есть авторы или редакторы, которых нужно ограничить в количестве создаваемых записей, чтобы контролировать качество контента и нагрузку на сервер. В этой статье разберем, как установить лимит на количество публикаций в WordPress с помощью кода и плагинов, а также рассмотрим практические примеры.
Почему важно контролировать количество публикаций пользователей
Ограничение публикаций полезно для:
- Контроля качества — чтобы авторы не перегружали сайт низкокачественным контентом.
- Оптимизации работы — уменьшение количества записей снижает нагрузку на базу данных и ускоряет работу сайта.
- Управления подпиской и монетизацией — можно ограничить количество публикаций для бесплатных пользователей.
Такой функционал не входит в стандартный набор WordPress, поэтому реализуется через код или плагины.
Реализация ограничения количества публикаций через код
Для ограничения публикаций нам нужно отслеживать попытки создания новых записей и блокировать их, если лимит достигнут. Это можно сделать, используя хук user_has_cap, который отвечает за проверку прав пользователя. Ниже пример функции wpin_limit_user_posts, ограничивающей число записей в типе post до 5 для роли 'author'.
function wpin_limit_user_posts($allcaps, $caps, $args, $user) {
// Проверяем, что проверяется право на создание записи
if (isset($args[0]) && $args[0] === 'edit_posts') {
$user_info = get_userdata($user->ID);
if (in_array('author', $user_info->roles)) {
$count = count_user_posts($user->ID, 'post');
$limit = 5; // Лимит публикаций
if ($count >= $limit) {
// Запрещаем создавать новые записи
$allcaps['edit_posts'] = false;
}
}
}
return $allcaps;
}
add_filter('user_has_cap', 'wpin_limit_user_posts', 10, 4);
Этот код проверит при попытке создания или редактирования записи, превышен ли лимит. Если да — право на редактирование новых записей отключается. Можно расширить логику под другие роли и типы записей.
Как уведомить пользователя о лимите
Чтобы пользователь понимал причину блокировки, добавим уведомление в админке через хук admin_notices:
function wpin_limit_user_posts_notice() {
$user = wp_get_current_user();
if (in_array('author', $user->roles)) {
$count = count_user_posts($user->ID, 'post');
$limit = 5;
if ($count >= $limit) {
echo '<div class="notice notice-error">';
echo 'Вы достигли лимита публикаций ('.$limit.'). Создание новых записей запрещено.';
echo '</div>';
}
}
}
add_action('admin_notices', 'wpin_limit_user_posts_notice');
Так пользователь увидит сообщение в админке при попытке создания новой записи.
Использование плагинов для ограничения публикаций
Если вы предпочитаете готовые решения, можно использовать плагины:
- Restrict Author Posting — ограничивает количество публикаций для авторов.
- Limit Posts — позволяет устанавливать лимиты по ролям и типам записей.
- Clearfy Pro — плагин для оптимизации и управления WordPress. В нем есть много функций для контроля контента, в том числе можно настроить ограничения и оптимизацию публикаций.
Например, Clearfy Pro позволяет гибко управлять правами и ограничениями без кода.
Как расширить функционал: лимиты по категориям и типам записей
Иногда нужно не просто ограничить общее количество записей, а задать лимиты по категориям или пользовательским типам записей (CPT). Тогда в функции wpin_limit_user_posts необходимо учитывать дополнительные параметры.
Например, подсчёт записей в конкретной категории:
function wpin_count_user_posts_in_category($user_id, $category_slug) {
$args = [
'author' => $user_id,
'post_type' => 'post',
'posts_per_page' => -1,
'category_name' => $category_slug,
'fields' => 'ids'
];
$query = new WP_Query($args);
return $query->found_posts;
}
Эту функцию можно вызвать внутри ограничения и задать лимит для определенной категории, например 3 публикации.
Практические советы и нюансы при настройке лимитов
При реализации ограничений учитывайте:
- Кеширование — убедитесь, что кеш страниц и объектов не мешает отображать корректный статус лимита.
- Обновление лимитов — можно добавить страницу настроек для администраторов, где менять лимиты без правки кода.
- Исключения — разрешите администраторам обходить лимиты.
- Уведомления — не только в админке, но и по email, если пользователь достиг лимита.
Если у вас есть потребность в более сложной логике — например, лимит по времени (максимум 5 публикаций в месяц), можно расширить код, используя метаполя и хук save_post.
Заключение
Ограничение числа публикаций в WordPress — полезный инструмент для контроля качества контента и управления ресурсами сайта. Вы можете реализовать это с помощью простого кода на PHP или использовать специализированные плагины. В статье приведены примеры кода и рекомендации, которые помогут вам быстро внедрить такой функционал и адаптировать его под свои задачи.