В процессе работы с WordPress часто накапливаются пустые категории и термины таксономий, которые не используются ни в одной записи. Это засоряет базу данных и усложняет навигацию по админке. В этой статье мы подробно разберём, как программно удалять такие пустые термины без использования плагинов, а также рассмотрим примеры для массового удаления и автоматизации процесса.
Почему важно удалять пустые категории и термины таксономий
Пустые термины занимают место в базе данных, увеличивают время отклика административной панели и могут запутать контент-менеджеров. Кроме того, наличие большого количества неиспользуемых терминов негативно влияет на SEO, если они выводятся в URL или списках.
Регулярная чистка таксономий помогает поддерживать структуру сайта в актуальном состоянии и облегчает дальнейшее развитие проекта.
Как определить пустые термины в WordPress
Пустыми считаются те термины, у которых нет связанных записей (post_count = 0). Можно получить список таких терминов с помощью функции get_terms() с параметром 'hide_empty' => true для обратного эффекта, но нам нужны именно пустые, поэтому используем 'hide_empty' => false и фильтруем по count.
function wpelement_get_empty_terms($taxonomy = 'category') {
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
));
$empty_terms = array();
foreach ($terms as $term) {
if ($term->count === 0) {
$empty_terms[] = $term;
}
}
return $empty_terms;
}Этот код возвращает массив объектов терминов, которые не связаны ни с одной записью.
Удаление пустых терминов программно
Чтобы удалить пустой термин, можно использовать функцию wp_delete_term(). Важно проверять результат и учитывать, что термины могут принадлежать разным таксономиям.
function wpelement_delete_empty_terms($taxonomy = 'category') {
$empty_terms = wpelement_get_empty_terms($taxonomy);
foreach ($empty_terms as $term) {
$deleted = wp_delete_term($term->term_id, $taxonomy);
if (is_wp_error($deleted)) {
error_log('Ошибка удаления термина ID ' . $term->term_id . ': ' . $deleted->get_error_message());
}
}
}Можно вызвать функцию wpelement_delete_empty_terms('category'); для удаления пустых категорий или заменить 'category' на другую таксономию, например, post_tag или пользовательскую.
Автоматизация удаления пустых терминов по расписанию
Для регулярной очистки удобно использовать планировщик задач WP-Cron. Ниже пример регистрации задачи и хука для ежедневного удаления пустых терминов:
function wpelement_schedule_empty_terms_cleanup() {
if (!wp_next_scheduled('wpelement_cleanup_empty_terms_hook')) {
wp_schedule_event(time(), 'daily', 'wpelement_cleanup_empty_terms_hook');
}
}
add_action('wp', 'wpelement_schedule_empty_terms_cleanup');
add_action('wpelement_cleanup_empty_terms_hook', 'wpelement_cleanup_empty_terms_callback');
function wpelement_cleanup_empty_terms_callback() {
$taxonomies = get_taxonomies(array('public' => true));
foreach ($taxonomies as $taxonomy) {
wpelement_delete_empty_terms($taxonomy);
}
}Этот код каждый день будет запускать функцию, которая удалит все пустые термины во всех публичных таксономиях.
Советы и рекомендации
- Перед массовым удалением сделайте резервную копию базы данных.
- Если у вас есть пользовательские таксономии, обязательно указывайте их в функции, чтобы очистка прошла комплексно.
- Проверяйте логи ошибок, чтобы выявить возможные проблемы удаления.
- Для визуального контроля можно добавить админ-панель с кнопкой запуска очистки с помощью плагинов, например, Clearfy Pro, который содержит функции оптимизации базы.
Пример использования фильтрации и удаления пустых терминов с пользовательской таксономией
Если у вас есть таксономия, например, product_cat для WooCommerce или другой, то код аналогичен:
function wpelement_delete_empty_product_cats() {
wpelement_delete_empty_terms('product_cat');
}
// Вызов функции вручную или через крон
wpelement_delete_empty_product_cats();Так вы можете поддерживать чистоту таксономий, не засоряя базу ненужными данными.
Итоги
Удаление пустых терминов таксономий — важная задача для поддержания порядка и оптимизации WordPress. Используя функции get_terms() и wp_delete_term(), вы легко можете автоматизировать этот процесс и избежать накопления мусора в базе. Включение регулярной очистки через WP-Cron сделает процесс полностью автономным.
Для более продвинутой оптимизации и дополнительных возможностей можно обратить внимание на плагины, такие как Clearfy Pro, которые помогут не только с очисткой таксономий, но и с другими аспектами оптимизации WordPress.