Как автоматически удалять старые загрузки в WordPress для оптимизации сайта

Почему важно удалять старые загрузки в WordPress

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

Удаление старых загрузок помогает:

  • Освободить место на сервере
  • Ускорить резервное копирование и обслуживание сайта
  • Улучшить производительность сайта и базы данных
  • Поддерживать порядок в медиабиблиотеке

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

Как определить «старые» загрузки и подготовиться к удалению

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

  • Дата загрузки (например, файлы старше 1 года)
  • Использование медиафайла (непривязанные к записям)
  • Размер файла (для удаления больших неиспользуемых)

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

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

Создадим функцию wplab_delete_old_uploads(), которая будет удалять медиафайлы старше заданного срока. Для наглядности возьмём срок в 365 дней.

function wplab_delete_old_uploads() {
    $days = 365; // Количество дней
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'date_query'     => array(
            array(
                'before' => $date_threshold,
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $attachments = get_posts($args);

    foreach ($attachments as $attachment_id) {
        // Проверяем, используется ли медиафайл в записях
        $is_used = wplab_is_attachment_used($attachment_id);
        if (!$is_used) {
            wp_delete_attachment($attachment_id, true); // Удаляем без возможности восстановления
        }
    }
}

function wplab_is_attachment_used($attachment_id) {
    global $wpdb;
    $attachment_url = wp_get_attachment_url($attachment_id);
    if (!$attachment_url) return false;

    // Ищем ссылки на файл в контенте записей
    $query = $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
        '%' . $wpdb->esc_like(basename($attachment_url)) . '%'
    );
    $result = $wpdb->get_var($query);

    return !empty($result);
}

Эта функция получает все вложения старше 365 дней и проверяет, используются ли они в содержимом сайта. Если нет — удаляет.

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

Чтобы функция запускалась автоматически, добавим событие в WordPress cron:

add_action('wplab_daily_delete_old_uploads', 'wplab_delete_old_uploads');

// Регистрируем cron при инициализации
function wplab_register_cron() {
    if (!wp_next_scheduled('wplab_daily_delete_old_uploads')) {
        wp_schedule_event(time(), 'daily', 'wplab_daily_delete_old_uploads');
    }
}
add_action('wp', 'wplab_register_cron');
<

Теперь функция wplab_delete_old_uploads() будет запускаться ежедневно.

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

Если вы не хотите писать код, можно использовать готовые решения. Рекомендуем обратить внимание на:

  • Media Cleaner — плагин для поиска и удаления неиспользуемых медиафайлов. Он проверяет, привязаны ли файлы к записям, и предлагает удалить мусор.
  • WP Optimize — плагин для оптимизации базы данных и очистки медиа. Поддерживает удаление ревизий и неиспользуемых файлов.

Важно: перед использованием плагинов делайте полную резервную копию, так как удаление медиафайлов необратимо.

Как интегрировать WPLab My Popup для уведомления об очистке

Для информирования администраторов о результатах очистки можно использовать плагин My Popup. Например, после удаления выводить сообщение с количеством удалённых файлов.

Пример кода для вызова всплывающего окна после очистки:

function wplab_notify_admin_after_cleanup() {
    $deleted_count = 0;
    // Ваша логика подсчёта удалённых файлов

    if ($deleted_count > 0) {
        echo '<script>
        jQuery(document).ready(function($) {
            MyPopup.open({
                title: "Очистка медиафайлов",
                content: "Удалено файлов: ' . $deleted_count . '"
            });
        });
        </script>';
    }
}
add_action('admin_notices', 'wplab_notify_admin_after_cleanup');

Советы по безопасности и предупреждения

Автоматическое удаление файлов — операция рискованная, особенно если фильтры заданы некорректно. Несколько рекомендаций:

  • Всегда делайте резервные копии перед запуском очистки.
  • Проверяйте файлы на использование в записях и плагинах.
  • Тестируйте код на тестовом сайте перед применением в продакшене.
  • Ограничивайте права доступа к функциям удаления.

Так вы защитите себя от потери важных данных.

Как создать собственный виджет WordPress с примерами кода WPLab
14.11.2025
Оптимальное использование хуков в WordPress: практические советы и примеры
16.01.2026
Как удалить автоматические чистки кеша в WordPress: решение проблем с кешированием
14.04.2026
Как автоматически удалять старые медиа-файлы в WordPress
07.03.2026
Как изменить вывод сообщений об ошибках в WordPress
04.01.2026