Автоматическое удаление старых медиафайлов в WordPress

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

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

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

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

Как определить старые и неиспользуемые медиафайлы

Для начала нужно понять, что считать «старыми» и «неиспользуемыми» файлами. Обычно это медиа, которые:

Для выявления таких файлов можно использовать SQL-запросы к базе данных, анализ ссылок в контенте, а также специальные функции WordPress.

Пример SQL-запроса для поиска неиспользуемых медиафайлов

SELECT ID, post_title, post_date FROM wp_posts
WHERE post_type = 'attachment'
AND ID NOT IN (
  SELECT meta_value FROM wp_postmeta WHERE meta_key = '_thumbnail_id'
  UNION
  SELECT ID FROM wp_posts WHERE post_content LIKE CONCAT('%', guid, '%')
);

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

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

Ниже приведён пример функции для WordPress, которая удаляет вложения старше заданного количества дней и не используемые в контенте. Функция wpdetect_delete_old_unused_media() проверяет дату загрузки и наличие вложения в постах.

function wpdetect_delete_old_unused_media($days = 90) {
  global $wpdb;
  $date_limit = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));

  $attachments = $wpdb->get_results($wpdb->prepare(
    "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_date < %s",
    $date_limit
  ));

  foreach ($attachments as $attachment) {
    $id = $attachment->ID;
    // Проверяем использование в миниатюрах
    $thumbnail_used = $wpdb->get_var($wpdb->prepare(
      "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id' AND meta_value = %d",
      $id
    ));

    // Проверяем использование в контенте
    $content_used = $wpdb->get_var($wpdb->prepare(
      "SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
      '%' . $wpdb->esc_like(wp_get_attachment_url($id)) . '%'
    ));

    if (!$thumbnail_used && !$content_used) {
      wp_delete_attachment($id, true);
    }
  }
}

Эту функцию можно вызвать из wp-cron для регулярной очистки. Например, добавить в functions.php или подключить как часть собственного плагина.

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

Если вы не хотите писать код, есть несколько плагинов, которые могут помочь с этой задачей:

Плагин Media Cleaner особенно полезен, так как он визуально показывает файлы, которые не используются, и позволяет безопасно их удалить.

Как настроить автоматическую очистку с помощью WP-Cron

Чтобы процесс удаления старых медиафайлов происходил автоматически, используйте планировщик задач WordPress — WP-Cron. Добавьте следующий код в functions.php вашей темы или в плагин:

function wpdetect_schedule_media_cleanup() {
  if (!wp_next_scheduled('wpdetect_daily_media_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpdetect_daily_media_cleanup');
  }
}
add_action('wp', 'wpdetect_schedule_media_cleanup');

add_action('wpdetect_daily_media_cleanup', function() {
  wpdetect_delete_old_unused_media(90); // удалять файлы старше 90 дней
});

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

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

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

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

Итоги и советы по применению

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

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

Как удалить неиспользуемые таблицы в базе данных WordPress
07.11.2025
Обслуживание REST API WordPress — практические советы и примеры кода
29.11.2025
Автоматическое отключение неиспользуемых плагинов в WordPress: практическое руководство
20.12.2025
Как создать собственный плагин WordPress с примером кода
31.10.2025
Как автоматизировать управление transient в WordPress: практическое руководство
26.12.2025