В стандартном функционале WordPress нет возможности ограничить количество категорий, которые можно выбрать для одной записи. Однако в некоторых проектах это может быть критично для поддержания структуры контента и удобства навигации. В этой статье разберём, как установить ограничение на число категорий при создании и редактировании постов, используя как кодовые решения, так и плагины.
Зачем ограничивать число категорий для записи
Ограничение выбора категорий нужно, чтобы:
- Избежать избыточной категоризации, которая ухудшает навигацию и SEO.
- Соблюдать бизнес-логику сайта — например, когда каждая запись должна принадлежать только к одной или двум категориям.
- Упростить администрирование и анализ данных на сайте.
Рассмотрим, как реализовать это на уровне интерфейса редактирования записи.
Ограничение выбора категорий с помощью кода в functions.php
Самый лёгкий способ — использовать JavaScript для контроля выбора чекбоксов в метабоксе категорий на странице редактирования записи.
Добавьте следующий код в файл functions.php вашей темы (или в плагин-сниппет):
function wplog_limit_categories_js() {
global $pagenow;
if ( $pagenow === 'post.php' || $pagenow === 'post-new.php' ) {
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
const maxCategories = 2; // Максимальное число категорий
const checkboxes = document.querySelectorAll('#categorychecklist input[type=checkbox]');
checkboxes.forEach(function(checkbox) {
checkbox.addEventListener('change', function() {
const checkedCount = [...checkboxes].filter(cb => cb.checked).length;
if (checkedCount > maxCategories) {
this.checked = false;
alert('Можно выбрать не более ' + maxCategories + ' категорий.');
}
});
});
});
</script>
<?php
}
}
add_action('admin_footer-post.php', 'wplog_limit_categories_js');
add_action('admin_footer-post-new.php', 'wplog_limit_categories_js');Этот скрипт отслеживает выбор категорий и не позволяет выбрать больше заданного лимита. В примере максимум — 2 категории.
Проверка на стороне сервера — обязательна!
Важно! Клиентский скрипт можно отключить, поэтому нужно также проверять данные при сохранении записи.
function wplog_limit_categories_save_post( $post_id ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if ( ! current_user_can('edit_post', $post_id) ) {
return;
}
if ( isset($_POST['post_category']) ) {
$categories = array_map('intval', $_POST['post_category']);
$max = 2; // тот же лимит
if ( count($categories) > $max ) {
wp_die('Ошибка: можно выбрать не более ' . $max . ' категорий. <a href="javascript:history.back()">Вернуться назад</a>');
}
}
}
add_action('save_post', 'wplog_limit_categories_save_post');Этот код прерывает сохранение, если категории выбраны сверх лимита, и выводит ошибку.
Использование плагинов для ограничения категорий
Если не хочется писать код, можно воспользоваться готовыми плагинами, например:
- Restrict Categories — позволяет ограничить категории, доступные для выбора пользователям. Можно настроить и ограничения по количеству.
- Clearfy Pro — многофункциональный плагин для оптимизации и настройки WordPress, включая ограничения и фильтры для категорий.
Эти инструменты удобны, если нужна более гибкая настройка и дополнительные функции.
Расширение функционала: ограничение выбора категорий по типу пользователя
В некоторых случаях нужно, чтобы разные роли пользователей имели разные ограничения. К примеру, редакторы могут выбирать до 5 категорий, а авторы — не более 2.
Для этого в функции проверки можно добавить проверку роли:
function wplog_limit_categories_save_post_role( $post_id ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if ( ! current_user_can('edit_post', $post_id) ) {
return;
}
$user = wp_get_current_user();
$max = 2;
if ( in_array('editor', (array) $user->roles) ) {
$max = 5;
}
if ( isset($_POST['post_category']) ) {
$categories = array_map('intval', $_POST['post_category']);
if ( count($categories) > $max ) {
wp_die('Ошибка: можно выбрать не более ' . $max . ' категорий. <a href="javascript:history.back()">Вернуться назад</a>');
}
}
}
add_action('save_post', 'wplog_limit_categories_save_post_role');Такой подход позволяет гибко настроить логику под разные группы пользователей.
Вывод
Ограничение числа категорий — простая, но важная настройка, которая помогает поддерживать порядок в структуре сайта. Используйте JavaScript для удобства пользователя и обязательную проверку на сервере для безопасности. При необходимости подключайте плагины с расширенными возможностями.
Если хотите расширить функционал WordPress с удобными инструментами, советуем ознакомиться с WPShop.ru — здесь есть полезные плагины и темы для любых задач.