Как создать динамические категории в WordPress с помощью кода

В стандартном WordPress категории создаются и обновляются вручную. Но что делать, если нужны категории, которые автоматически формируются на основе определённых условий, например, по количеству постов, тегам или дате публикации? В этой статье разберём, как создать динамические категории в WordPress с помощью собственного кода и когда это может быть полезно.

Зачем нужны динамические категории в WordPress

Динамические категории позволяют автоматически структурировать контент, не требуя постоянного ручного обновления. Это полезно для сайтов с большим объёмом информации или регулярно обновляющимся контентом.

Например, можно автоматически создавать категории для:

  • Постов, опубликованных за последние 30 дней;
  • Постов, в которых встречается определённое ключевое слово;
  • Тем, которые набирают популярность по количеству просмотров;
  • Материалов, сгруппированных по авторам или пользовательским полям.

Такой подход экономит время редакторов и улучшает навигацию для пользователей.

Основные методы создания динамических категорий

Использование фильтров и хуков WordPress

WordPress предоставляет гибкую систему хуков, с помощью которых можно модифицировать существующие таксономии или создавать новые категории на лету. Например, можно использовать фильтр get_terms, чтобы подменять список категорий в зависимости от условий.

Однако такой способ не создаёт категории в базе данных, а лишь изменяет вывод. Это подходит для отображения, но не для полноценного взаимодействия с категориями.

Программное создание и обновление категорий

Для полноценного создания категорий удобнее использовать функции WordPress для работы с таксономиями — wp_insert_term, wp_update_term и wp_delete_term. Это позволяет создавать категории в базе данных и управлять ими программно.

Для автоматизации можно написать функцию, которая будет запускаться по расписанию (через WP-Cron) и обновлять список категорий.

Пример: автоматическое создание категории по количеству постов

Рассмотрим пример, как создать категории, которые будут отражать диапазоны количества постов, например: «Менее 10 постов», «От 10 до 50 постов», «Более 50 постов».

function wpfind_create_dynamic_categories() {
    $counts = [
        'less-10' => 'Менее 10 постов',
        '10-50' => 'От 10 до 50 постов',
        'more-50' => 'Более 50 постов'
    ];

    foreach ($counts as $slug => $name) {
        $term = term_exists($slug, 'category');
        if (!$term) {
            wp_insert_term($name, 'category', ['slug' => $slug]);
        }
    }

    $posts_count = wp_count_posts()->publish;

    if ($posts_count < 10) {
        $category_slug = 'less-10';
    } elseif ($posts_count <= 50) {
        $category_slug = '10-50';
    } else {
        $category_slug = 'more-50';
    }

    $term = get_term_by('slug', $category_slug, 'category');
    if ($term) {
        // Присваиваем всем постам эту категорию (пример для всех постов)
        $args = [
            'post_type' => 'post',
            'posts_per_page' => -1
        ];
        $posts = get_posts($args);
        foreach ($posts as $post) {
            wp_set_post_terms($post->ID, [$term->term_id], 'category', true);
        }
    }
}
add_action('wp_find_cron_hook', 'wpfind_create_dynamic_categories');

// Регистрируем событие в WP-Cron, если его нет
if (!wp_next_scheduled('wp_find_cron_hook')) {
    wp_schedule_event(time(), 'daily', 'wp_find_cron_hook');
}

Этот код ежедневно проверяет количество опубликованных постов и присваивает соответствующую категорию всем постам. В реальных условиях стоит адаптировать логику под задачи проекта.

Динамические категории на основе пользовательских полей

Иногда категории хочется формировать, опираясь на данные из метаполей. Например, у вас есть метаполе product_type для постов, и хочется создавать категории по значениям этого поля.

Для этого алгоритм будет следующим:

  1. Собрать уникальные значения метаполя product_type.
  2. Проверить, существуют ли категории с такими именами.
  3. Создать недостающие категории.
  4. Присвоить постам соответствующие категории.

Пример кода:

function wpfind_dynamic_categories_from_meta() {
    global $wpdb;
    // Получаем уникальные значения метаполя
    $meta_key = 'product_type';
    $values = $wpdb->get_col($wpdb->prepare(
        "SELECT DISTINCT meta_value FROM {$wpdb->postmeta} WHERE meta_key = %s",
        $meta_key
    ));

    if (!$values) {
        return;
    }

    foreach ($values as $value) {
        $slug = sanitize_title($value);
        $term = term_exists($slug, 'category');
        if (!$term) {
            wp_insert_term($value, 'category', ['slug' => $slug]);
        }

        // Получаем посты с этим значением
        $posts = get_posts([
            'post_type' => 'post',
            'posts_per_page' => -1,
            'meta_key' => $meta_key,
            'meta_value' => $value
        ]);

        foreach ($posts as $post) {
            wp_set_post_terms($post->ID, [$slug], 'category', true);
        }
    }
}
add_action('wp_find_cron_hook_meta', 'wpfind_dynamic_categories_from_meta');

if (!wp_next_scheduled('wp_find_cron_hook_meta')) {
    wp_schedule_event(time(), 'daily', 'wp_find_cron_hook_meta');
}

Такой подход хорошо подходит для сайтов с большим количеством товаров или материалов с метаданными, когда ручное создание категорий становится неудобным.

Как улучшить производительность и безопасность

Автоматическое создание и обновление категорий может влиять на производительность сайта. Чтобы избежать проблем, придерживайтесь следующих рекомендаций:

  • Используйте WP-Cron для запуска задач в фоне, чтобы не замедлять загрузку страниц.
  • Ограничивайте количество обрабатываемых постов за один запуск, если их слишком много.
  • Кэшируйте результаты запросов к базе данных, если они используются несколько раз.
  • Добавляйте проверку прав пользователя и используйте nonce при ручном запуске функций.

Также следите за тем, чтобы категории не создавались дублирующимися и не нарушали логику сайта — используйте term_exists и корректные слаги.

Полезные плагины для работы с таксономиями

Если хочется упростить задачу или получить расширенный функционал, можно посмотреть на плагины, которые помогают создавать и управлять таксономиями:

  • Clearfy Pro — плагин для оптимизации WordPress, который имеет функции управления таксономиями и может помочь убрать лишние категории.
  • WPRemark — плагин с расширенными возможностями для комментариев и таксономий.

Однако для полностью кастомных задач лучше использовать собственный код, как показано выше.

Как удалить пустые категории в WordPress с помощью кода
16.02.2026
Как использовать WP REST API для создания пользовательских endpoint’ов в WordPress
02.04.2026
Как отключить или исправить AJAX жёсткое кэширование в WordPress
08.12.2025
Как создать простую систему рейтинга в WordPress
04.12.2025
Как удалить старые версии постов в WordPress с помощью кода
23.01.2026

Сайт в разработке, скоро здесь будет портал о WordPress.