В некоторых случаях на сайте WordPress может возникнуть необходимость ограничить количество записей определённого типа, которые могут быть созданы или опубликованы. Например, если вы ведёте каталог с ограниченным числом товаров, или хотите контролировать количество постов в блоге, чтобы избежать перегрузки сайта. В этой статье разберём, как реализовать такие ограничения программно, а также рассмотрим полезные плагины для упрощения задачи.
Причины ограничения количества записей в WordPress
Ограничение числа записей может понадобиться для различных целей:
- Контроль качества контента — меньше записей, выше их ценность.
- Ограничение ресурсов — уменьшение нагрузки на базу данных и сервер.
- Управление пользовательским контентом — например, при мультипользовательских сайтах.
- Технические ограничения — например, лимит на количество товаров в интернет-магазине.
Понимание целей поможет выбрать правильный метод реализации.
Ограничение количества записей через хук сохранения записи
Использование action hook save_post для проверки количества
Самый надёжный способ — перехватить момент сохранения записи и проверить, не превышает ли текущее количество заданный лимит. Если превышает — отменить сохранение и вывести сообщение об ошибке.
function wpco_limit_post_count( $post_id ) {
// Проверяем, что это нужный тип записи
if ( get_post_type( $post_id ) !== 'post' ) {
return;
}
// Проверяем, чтобы это не была автосохранение
if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
return;
}
$limit = 10; // Максимальное количество записей
// Подсчитываем опубликованные записи
$count = wpco_get_published_post_count( 'post' );
// Если количество достигло лимита и это новая запись
if ( $count >= $limit && get_post_status( $post_id ) !== 'publish' ) {
// Отменяем сохранение
wp_die('Достигнуто максимальное количество записей: ' . $limit);
}
}
add_action( 'save_post', 'wpco_limit_post_count', 10, 1 );
function wpco_get_published_post_count( $post_type ) {
$count_posts = wp_count_posts( $post_type );
return isset( $count_posts->publish ) ? $count_posts->publish : 0;
}
Этот код проверит, что количество опубликованных записей не превышает 10. При попытке создать новую запись после достижения лимита сохранение прервётся с сообщением об ошибке.
Ограничение количества записей на уровне пользовательского интерфейса
Скрытие кнопки "Добавить новую" после достижения лимита
Чтобы пользователь сразу видел, что создание новых записей невозможно, стоит спрятать кнопку "Добавить новую" в админке. Это можно сделать с помощью фильтра admin_menu и проверки количества записей.
function wpco_remove_add_new_post_menu() {
$limit = 10;
$count = wpco_get_published_post_count( 'post' );
if ( $count >= $limit ) {
remove_submenu_page( 'edit.php', 'post-new.php' );
}
}
add_action( 'admin_menu', 'wpco_remove_add_new_post_menu' );
Теперь при достижении лимита кнопка "Добавить новую" исчезнет из меню для стандартных записей.
Ограничение количества записей с помощью плагинов
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- WP Limit Posts — позволяет ограничивать количество записей определённого типа для разных ролей пользователей.
- Restrict Content Pro — в расширенных настройках можно задать лимиты на публикацию для подписчиков.
- Clearfy Pro — плагин для оптимизации и настройки WordPress, который позволяет гибко управлять функционалом, в том числе ограничивать возможности пользователей.
Использование плагинов удобно, если вы хотите быстро внедрить ограничения без написания кода.
Дополнительные советы и рекомендации
При реализации ограничения стоит учитывать следующие моменты:
- Учитывайте разные статусы записей (черновики, на модерации) — нужно ли их считать в лимит?
- Для кастомных типов записей нужно корректно указывать тип в функциях.
- Если на сайте несколько авторов, можно делать ограничения на пользователя, а не на весь сайт.
- Обеспечьте информирование пользователей о достигнутом лимите — это улучшит UX.
- Тестируйте код и плагины на тестовом сайте, чтобы избежать сбоев.
Пример ограничения количества записей по автору
Если нужно ограничить количество записей для каждого автора отдельно, можно изменить код следующим образом:
function wpco_limit_post_count_per_author( $post_id ) {
if ( get_post_type( $post_id ) !== 'post' ) {
return;
}
if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
return;
}
$limit = 5; // Лимит записей на автора
$post = get_post( $post_id );
$author_id = $post->post_author;
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'author' => $author_id,
'fields' => 'ids',
];
$query = new WP_Query( $args );
if ( $query->found_posts >= $limit && get_post_status( $post_id ) !== 'publish' ) {
wp_die('Вы достигли максимального количества записей (' . $limit . ') для вашего пользователя.');
}
}
add_action( 'save_post', 'wpco_limit_post_count_per_author', 10, 1 );
Такой подход полезен для сайтов с несколькими авторами, где важно контролировать вклад каждого.
Заключение
Ограничение количества записей — задача, которую можно решить как программно, так и с помощью плагинов. Важно чётко определить цели и выбрать подходящий метод. Приведённые примеры кода помогут быстро внедрить базовый лимит, а плагины позволят расширить функционал без дополнительной разработки.