WPCourse

Как добавить автоматическое удаление старых чертежей в WordPress

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

Почему важно автоматизировать удаление старых файлов

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

  • Экономить дисковое пространство;
  • Поддерживать актуальность контента;
  • Избегать захламления файловой системы;
  • Уменьшить нагрузку на бэкапы и ускорить работу сайта.

Как определить, какие файлы считать "старыми"

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

  • Дата загрузки или последнего изменения файла;
  • Возраст файла в днях (например, старше 90 дней);
  • Статус файла в базе данных (например, неиспользуемые вложения в медиатеке WordPress).

В зависимости от задачи можно реализовать удаление по одному или нескольким критериям.

Реализация автоматического удаления файлов с помощью WP Cron

Для автоматизации мы можем добавить свою задачу в WP Cron — систему планировщика задач WordPress. Она позволяет запускать PHP-код по расписанию без необходимости запускать внешние cron-джобы.

Шаг 1. Планируем задачу удаления

Добавим в файл functions.php вашей темы (или в отдельный плагин) следующий код, который зарегистрирует ежесуточное событие:

add_action('wpcourse_delete_old_drawings_daily_event', 'wpcourse_delete_old_drawings');

function wpcourse_activate_cron() {
    if (!wp_next_scheduled('wpcourse_delete_old_drawings_daily_event')) {
        wp_schedule_event(time(), 'daily', 'wpcourse_delete_old_drawings_daily_event');
    }
}
register_activation_hook(__FILE__, 'wpcourse_activate_cron');

function wpcourse_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpcourse_delete_old_drawings_daily_event');
    wp_unschedule_event($timestamp, 'wpcourse_delete_old_drawings_daily_event');
}
register_deactivation_hook(__FILE__, 'wpcourse_deactivate_cron');

Этот код создаёт ежедневное событие, которое будет запускать функцию удаления.

Шаг 2. Функция удаления старых чертежей

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

function wpcourse_delete_old_drawings() {
    $upload_dir = wp_upload_dir();
    $drawings_dir = $upload_dir['basedir'] . '/drawings'; // Папка с чертежами
    $days_old = 90; // Удалять файлы старше 90 дней

    if (!is_dir($drawings_dir)) {
        return; // Папка не существует
    }

    $files = scandir($drawings_dir);
    $now = time();

    foreach ($files as $file) {
        if ($file === '.' || $file === '..') {
            continue;
        }

        $file_path = $drawings_dir . '/' . $file;

        if (is_file($file_path)) {
            $file_mtime = filemtime($file_path);
            $age_in_days = ($now - $file_mtime) / DAY_IN_SECONDS;

            if ($age_in_days > $days_old) {
                unlink($file_path); // Удаляем файл
            }
        }
    }
}

В этом примере мы рассматриваем, что все чертежи загружаются в папку wp-content/uploads/drawings. Вы можете изменить путь под свои нужды. Функция проверяет дату последнего изменения файла и удаляет те, которые старше 90 дней.

Автоматическое удаление медиафайлов из библиотеки WordPress

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

function wpcourse_delete_old_media_attachments() {
    $days_old = 90;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));

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

    $old_attachments = get_posts($args);

    foreach ($old_attachments as $attachment) {
        // Проверяем MIME тип, чтобы удалить только чертежи (например PDF или DWG)
        $mime = get_post_mime_type($attachment->ID);
        $allowed_mimes = array('application/pdf', 'application/acad', 'image/svg+xml');
        if (in_array($mime, $allowed_mimes)) {
            wp_delete_attachment($attachment->ID, true);
        }
    }
}

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

Использование плагина Clearfy Pro для управления файловой системой

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

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

Советы по безопасному удалению файлов

Перед автоматическим удалением всегда делайте резервные копии, особенно если файлы важны. Можно добавить в функцию удаление логирования — записывать в отдельный файл список удалённых файлов с датой и временем. Это поможет восстановить данные при ошибках.

Также учитывайте права доступа к папкам и файлам, чтобы PHP имел возможность их удалять. Если нет, то функция unlink выдаст ошибки.

Подводим итог

Автоматическое удаление старых чертежей в WordPress — вполне реализуемая задача, которая поможет поддерживать порядок и освобождать место на сервере. Вы можете использовать WP Cron и собственные функции на PHP для удаления файлов по дате, а также удалять вложения из медиатеки, чтобы не оставлять мусор в базе данных.

Если хотите сэкономить время и получить готовое решение с дополнительными функциями оптимизации, рассмотрите плагин Clearfy Pro.

×
Прокачай свой сайт WordPress!

WordPress

-20% на премиум темы и плагины

Создай сайт своей мечты ⋙