Как автоматически удалить неиспользуемые типы постов WordPress

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

Что такое типы постов в WordPress и почему важно их удалять

Типы постов (post types) — это способ группировки и хранения контента в WordPress. Помимо стандартных post и page, могут быть созданы пользовательские типы, например, product, portfolio или event. Когда такие типы перестают использоваться, записи остаются в базе, создавая «мусор».

Удаление неиспользуемых типов постов позволяет:

  • Оптимизировать базу данных и уменьшить её размер.
  • Повысить скорость запросов и загрузки сайта.
  • Сделать админ-панель WordPress чище и удобнее.
  • Снизить риск ошибок и конфликтов с другими плагинами.

Однако удалять записи нужно аккуратно, чтобы не потерять важные данные.

Как найти неиспользуемые типы постов — анализ базы данных

Первый шаг — определить, какие типы постов не используются. Для этого можно:

  • Посмотреть список зарегистрированных типов постов с помощью функции get_post_types().
  • Проверить количество записей каждого типа в базе: SELECT post_type, COUNT(*) FROM wp_posts GROUP BY post_type;
  • Оценить, какие типы не отображаются на сайте и не используются в админке.

Для упрощения анализа можно использовать плагин Post Types Order или WP phpMyAdmin для работы с базой данных.

Пример кода для вывода типов постов с количеством записей

function wpeditor_list_post_types_count() {
    $post_types = get_post_types(['public' => true], 'objects');
    echo '<ul>';
    foreach ($post_types as $post_type) {
        $count_posts = wp_count_posts($post_type->name);
        $count = array_sum((array) $count_posts);
        echo '<li>' . esc_html($post_type->label) . ' (' . esc_html($post_type->name) . '): ' . intval($count) . '</li>';
    }
    echo '</ul>';
}

add_action('admin_notices', 'wpeditor_list_post_types_count');

Этот код выводит в админке список типов постов с количеством записей, что помогает быстро оценить объемы данных.

Автоматическое удаление записей неиспользуемых типов с помощью кода

После анализа можно написать функцию, которая удалит все записи выбранного типа поста. Важно делать это с подтверждением и резервным копированием базы.

Пример функции для удаления всех постов типа old_custom_type

function wpeditor_delete_unused_post_type_posts($post_type) {
    $args = [
        'post_type' => $post_type,
        'post_status' => 'any',
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $posts = get_posts($args);
    if (!empty($posts)) {
        foreach ($posts as $post_id) {
            wp_delete_post($post_id, true); // true — удаление без перемещения в корзину
        }
    }
}

// Вызов функции для удаления
// wpeditor_delete_unused_post_type_posts('old_custom_type');

Такую функцию можно запускать вручную или через крон, например, с проверкой условий.

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

Для безопасности лучше запускать удаление через админскую страницу с nonce:

function wpeditor_register_delete_page() {
    add_submenu_page(
        'tools.php',
        'Удаление типов постов',
        'Удаление типов постов',
        'manage_options',
        'wpeditor-delete-post-types',
        'wpeditor_delete_page_html'
    );
}
add_action('admin_menu', 'wpeditor_register_delete_page');

function wpeditor_delete_page_html() {
    if (!current_user_can('manage_options')) {
        return;
    }
    if (isset($_POST['wpeditor_delete_nonce']) && wp_verify_nonce($_POST['wpeditor_delete_nonce'], 'wpeditor_delete_action')) {
        $post_type = sanitize_text_field($_POST['post_type']);
        wpeditor_delete_unused_post_type_posts($post_type);
        echo '<div class="notice notice-success">Удаление типа постов "' . esc_html($post_type) . '" выполнено.</div>';
    }
    $post_types = get_post_types(['public' => true], 'objects');
    echo '<h1>Удаление неиспользуемых типов постов</h1>';
    echo '<form method="POST">';
    wp_nonce_field('wpeditor_delete_action', 'wpeditor_delete_nonce');
    echo '<select name="post_type">';
    foreach ($post_types as $post_type) {
        echo '<option value="' . esc_attr($post_type->name) . '">' . esc_html($post_type->label) . '</option>';
    }
    echo '</select>';
    echo '<input type="submit" value="Удалить" class="button button-primary" />';
    echo '</form>';
}

Использование плагинов для удаления неиспользуемого контента

Если не хочется писать код, можно использовать плагины. Хороший вариант — Clearfy Pro, который умеет оптимизировать базу, удалять временные типы постов и очищать метаданные.

Преимущества использования плагина:

  • Простота и безопасность: пользовательский интерфейс для выбора типов постов.
  • Дополнительные инструменты для очистки базы и оптимизации.
  • Поддержка и обновления от разработчиков.

Также можно рассмотреть WP-Optimize для общей оптимизации базы, хотя он не всегда фокусируется на конкретных типах постов.

Рекомендации и советы по работе с типами постов

Чтобы избежать накопления неиспользуемого контента в будущем:

  • Регулярно проверяйте список типов постов и их использование.
  • При удалении плагина, который создавал кастомные типы, удаляйте и связанные записи (если они не нужны).
  • Используйте резервное копирование базы перед массовым удалением.
  • Автоматизируйте проверку типов постов с помощью WP Cron и создавайте отчеты.

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

Пример кода автоматической проверки и уведомления

function wpeditor_daily_post_type_report() {
    $post_types = get_post_types(['public' => true], 'names');
    $report = '';
    foreach ($post_types as $post_type) {
        $count = wp_count_posts($post_type)->publish ?? 0;
        if ($count > 0) {
            $report .= $post_type . ': ' . $count . "\n";
        }
    }
    if ($report) {
        wp_mail('admin@example.com', 'Ежедневный отчет по типам постов', $report);
    }
}
add_action('wpeditor_daily_event', 'wpeditor_daily_post_type_report');

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать управление ролями в WordPress с помощью кода
16.02.2026
Решение проблемы разных размеров картинок в WordPress: практическое руководство
09.12.2025
Как удалить или изменить URL страницы в WordPress без редиректа
24.12.2025
Как автоматизировать создание и обновление Sitemap в WordPress
18.01.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях через код
08.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше