В процессе работы с WordPress накапливается множество неиспользуемых категорий, которые не содержат ни одной записи. Они занимают место в базе данных и могут создавать путаницу при навигации и администрировании сайта. В этой статье мы разберём, как эффективно удалить пустые категории программно, без использования громоздких плагинов.
Почему важно удалять пустые категории в WordPress
Пустые категории — это категории, у которых нет ни одной опубликованной записи. Они могут появляться по разным причинам: при удалении записей, ошибках импорта, тестировании или просто из-за неактивности. Удаление пустых категорий помогает:
- Сократить размер базы данных и улучшить её производительность.
- Упростить структуру сайта и навигацию для пользователей.
- Избежать ошибок и конфликтов при работе с темами и плагинами, которые работают с таксономиями.
Хотя существуют плагины для управления категориями, зачастую достаточно написать простой код, который автоматизирует этот процесс и может запускаться вручную или по расписанию.
Как определить пустые категории программно
Для начала нам нужно получить список всех категорий, которые не содержат записей. В WordPress для категорий используется таксономия category, и у каждой категории есть свой счётчик записей (count), который отражает количество опубликованных записей.
Пример функции, которая возвращает пустые категории:
function wordpressa_get_empty_categories() {
$args = [
'taxonomy' => 'category',
'hide_empty' => true, // true - вернёт только непустые, нам нужен false
'fields' => 'all',
'number' => 0 // получить все
];
$all_categories = get_terms($args);
$empty_categories = [];
foreach ($all_categories as $category) {
if ($category->count === 0) {
$empty_categories[] = $category;
}
}
return $empty_categories;
}Однако параметр hide_empty по умолчанию скрывает пустые категории, поэтому чтобы получить именно пустые, нужно указать false.
Исправленный пример:
function wordpressa_get_empty_categories() {
$args = [
'taxonomy' => 'category',
'hide_empty' => false, // получаем все категории включая пустые
'fields' => 'all'
];
$all_categories = get_terms($args);
$empty_categories = array_filter($all_categories, function($cat) {
return $cat->count === 0;
});
return $empty_categories;
}Как удалить пустые категории через код
Удаление категории происходит с помощью функции wp_delete_term( $term_id, $taxonomy ). Чтобы удалить все пустые категории, можно использовать следующий код:
function wordpressa_delete_empty_categories() {
$empty_categories = wordpressa_get_empty_categories();
$deleted = 0;
foreach ($empty_categories as $category) {
$result = wp_delete_term($category->term_id, 'category');
if (!is_wp_error($result)) {
$deleted++;
}
}
return $deleted;
}Этот код можно вывести в админке или запускать через wp-cli. Например, для вывода результата в админке:
add_action('admin_notices', function() {
if (isset($_GET['delete_empty_categories'])) {
$count = wordpressa_delete_empty_categories();
echo '<div class="notice notice-success is-dismissible">Удалено пустых категорий: ' . $count . '</div>';
}
});<И добавить ссылку для запуска удаления в меню админки:
add_action('admin_menu', function() {
add_submenu_page(
'tools.php',
'Удалить пустые категории',
'Удалить пустые категории',
'manage_options',
'wordpressa-delete-empty-categories',
function() {
echo '<h1>Удаление пустых категорий</h1>';
echo '<a href="tools.php?page=wordpressa-delete-empty-categories&delete_empty_categories=1" class="button button-primary">Удалить пустые категории</a>';
}
);
});Автоматизация удаления пустых категорий: запуск по cron
Чтобы не запускать удаление вручную, можно автоматизировать процесс через системный cron или WP-Cron. Рассмотрим вариант с WP-Cron.
Добавим задачу, которая будет запускаться, например, раз в неделю:
function wordpressa_schedule_empty_category_cleanup() {
if (!wp_next_scheduled('wordpressa_weekly_empty_category_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wordpressa_weekly_empty_category_cleanup');
}
}
add_action('wp', 'wordpressa_schedule_empty_category_cleanup');
add_action('wordpressa_weekly_empty_category_cleanup', 'wordpressa_delete_empty_categories');Обратите внимание, что WP-Cron зависит от посещаемости сайта. Для более надёжного решения используйте системный cron и wp-cli команду.
Пример использования плагинов для проверки и удаления пустых категорий
Если вы предпочитаете использовать плагины, есть несколько популярных решений:
- Term Management Tools — позволяет объединять и удалять таксономии, включая пустые категории.
- Category Cleanup — специализированный плагин для удаления пустых категорий.
Однако эти плагины иногда избыточны и могут замедлять админку, поэтому для разовых действий лучше использовать код.
Интеграция с плагином Clearfy Pro
Плагин Clearfy Pro предлагает модуль оптимизации таксономий, который может помочь с очисткой пустых категорий и меток. Если вы уже используете Clearfy Pro, активируйте соответствующую опцию и дополнительно запускайте нашу функцию для полной очистки.
Важные нюансы и рекомендации
- Перед выполнением удаления обязательно сделайте резервную копию базы данных.
- Проверьте, что категории действительно пустые и не используются в черновиках или других типах записей.
- Помните, что удаление категории не удалит записи, они просто останутся без категории.
- Для кастомных таксономий аналогично можно адаптировать функции, заменив
'category'на нужное название таксономии.
Заключение
Удаление пустых категорий в WordPress — частая задача, которая помогает поддерживать сайт в порядке и улучшать производительность. Использование программных решений с простым кодом значительно ускоряет этот процесс и позволяет автоматизировать его. Приведённые в статье примеры помогут вам быстро внедрить такую очистку на своём сайте.