В WordPress с течением времени накапливается большое количество медиафайлов, которые перестают быть актуальными. Эти файлы занимают место на сервере, замедляют работу сайта и усложняют резервное копирование. В этой статье мы подробно разберём, как автоматизировать удаление старых медиафайлов в WordPress с помощью кода и плагинов, а также рассмотрим нюансы, чтобы не навредить сайту.
Почему важно удалять старые медиафайлы в WordPress
Медиафайлы — это изображения, видео, аудио и другие загруженные файлы, которые используются для наполнения контента сайта. Со временем среди них появляются устаревшие, неиспользуемые или дублирующиеся файлы, которые:
- Захламляют хранилище и увеличивают размер резервных копий.
- Могут замедлять работу сайта, если медиа-библиотека слишком большая.
- Создают дополнительные расходы на хостинг.
Ручное удаление каждого файла — трудоёмкий и рискованный процесс. Автоматизация позволяет безопасно и регулярно очищать библиотеку.
Как определить старые медиафайлы для удаления
Прежде чем удалять, важно понять, какие медиафайлы считаются «старыми» и неиспользуемыми. Обычно это файлы, которые:
- Не прикреплены к постам или страницам (attachment post_type).
- Не используются в содержимом сайта (проверка вхождения URL файла в постах, виджетах, настройках).
- Были загружены более определённого времени назад (например, старше 1 года).
Для автоматизации можно комбинировать эти критерии. В примерах ниже мы реализуем проверку по дате и привязке.
Автоматизация удаления через WPManual_cron_delete_old_media: пример кода
Для автоматического удаления старых медиафайлов используем WP-Cron. Создадим функцию, которая найдет и удалит вложения старше 180 дней без привязки к контенту.
function wpmanual_cron_delete_old_media() {
$args = array(
'post_type' => 'attachment',
'post_status' => 'inherit',
'posts_per_page' => -1,
'date_query' => array(
array(
'column' => 'post_date',
'before' => '180 days ago',
),
),
'meta_query' => array(
array(
'key' => '_wp_attachment_metadata',
'compare' => 'EXISTS',
),
),
);
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
// Проверяем, используется ли файл в постах
$usage_count = 0;
$attachment_url = wp_get_attachment_url($attachment->ID);
// Поиск использования в содержимом
global $wpdb;
$usage_count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment_url) . '%'
));
// Если не используется, удаляем
if ($usage_count == 0) {
wp_delete_attachment($attachment->ID, true);
}
}
}
// Регистрация события cron при активации темы или плагина
if (!wp_next_scheduled('wpmanual_cron_delete_old_media_event')) {
wp_schedule_event(time(), 'daily', 'wpmanual_cron_delete_old_media_event');
}
add_action('wpmanual_cron_delete_old_media_event', 'wpmanual_cron_delete_old_media');
В этом коде мы:
- Ищем вложения старше 180 дней.
- Проверяем наличие ссылок на файл в контенте сайта.
- Удаляем, если файл не используется.
- Запускаем функцию ежедневно через WP-Cron.
Управление расписанием WP-Cron
По умолчанию WP-Cron запускается при посещении сайта, что может быть не идеально для сайтов с низким трафиком. Чтобы обеспечить регулярность, можно:
- Настроить системный cron на сервере для вызова
wp-cron.phpкаждую минуту. - Использовать плагин WP Crontrol для просмотра и управления заданиями WP-Cron.
Плагины для автоматизации удаления медиа и очистки библиотеки
Если не хотите писать код, можно использовать проверенные плагины:
- Media Cleaner — анализирует и удаляет неиспользуемые медиафайлы из библиотеки и папок
uploads. Есть Pro-версия с расширенными функциями. - DNUI (Delete Not Used Image) — простой плагин для поиска и удаления неиспользуемых изображений.
- Force Regenerate Thumbnails — полезен для очистки и переработки миниатюр, чтобы не хранить лишние размеры.
При работе с плагинами всегда делайте резервную копию данных!
Как использовать WPManual для оптимизации медиа
Плагин Clearfy Pro из WPShop предлагает расширенные функции оптимизации, включая очистку базы и медиа. Он может помочь выявить и удалить неиспользуемые файлы, а также оптимизировать загрузку.
Рекомендации по безопасности и резервному копированию
Удаление медиафайлов — операция с потенциальным риском потери нужных данных. Чтобы избежать проблем:
- Всегда делайте резервное копирование сайта и базы данных перед автоматической очисткой.
- Сначала запускайте удаление в тестовой среде или на копии сайта.
- Проверяйте логи и используйте уведомления о выполнении задачи.
- Не удаляйте файлы, которые могут использоваться в пользовательских полях или динамическом контенте.
Итоги
Автоматизация удаления старых медиафайлов в WordPress — эффективный способ поддерживать сайт в порядке и экономить ресурсы. С помощью WP-Cron и правильных проверок можно настроить регулярную очистку без риска удаления нужных данных. Плагины, такие как Media Cleaner или Clearfy Pro, облегчают задачу и предоставляют удобный интерфейс для управления медиа. Главное — всегда работать аккуратно и с резервными копиями.