В процессе эксплуатации сайта на WordPress часто накапливается большое количество медиафайлов: изображения, видео, документы. Некоторые из них могут быть устаревшими, неиспользуемыми или загружены по ошибке. Удаление таких файлов вручную через админку бывает неудобным и занимает много времени, особенно если нужно удалить медиа по определённым критериям — например, по дате загрузки или типу файлов.
Почему важно удалять неиспользуемые медиафайлы
Медиафайлы занимают место на сервере и могут негативно влиять на производительность сайта, особенно если их много. К тому же, большое количество неиспользуемых файлов усложняет управление библиотекой и резервное копирование. Регулярное удаление ненужных файлов помогает поддерживать порядок и оптимизировать хранилище.
Удаление медиа по дате и типу файла — задачи и сложности
Стандартный медиа-библиотека WordPress позволяет фильтровать файлы только по месяцу, но этого часто недостаточно. Иногда нужно удалить файлы, загруженные в определённый период, например, старше года, или только файлы определённых типов, например, только PNG или только PDF.
Кроме того, важно проверить, что удаляемые файлы не используются в записях или страницах, чтобы не нарушить отображение контента.
Пример решения: массовое удаление медиа через WP-CLI с фильтрацией
WP-CLI — мощный инструмент для управления WordPress из командной строки. Он позволяет быстро удалять медиафайлы с фильтрацией по дате и типу.
Например, чтобы удалить все медиафайлы старше 1 года, можно использовать такой скрипт bash:
YEAR_AGO=$(date --date='1 year ago' +%Y-%m-%d)
wp media list --field=ID --format=csv --date_query='before=$YEAR_AGO' | xargs -n1 wp media delete --yes
В этом примере мы получаем список ID медиафайлов, загруженных до даты год назад, и удаляем каждый по очереди.
Чтобы добавить фильтрацию по типу файла (например, только изображения PNG), измените команду:
wp media list --field=ID --format=csv --date_query='before=$YEAR_AGO' --mime_type='image/png' | xargs -n1 wp media delete --yes
Реализация массового удаления медиа с помощью кастомного PHP-скрипта
Если доступ к WP-CLI ограничен, можно написать PHP-функцию, которую запустить через плагин или файл темы. Ниже пример функции wpbest_delete_media_by_date_and_type, которая удаляет медиафайлы по дате и MIME-типу:
function wpbest_delete_media_by_date_and_type($date_before, $mime_type = '') {
$args = [
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
'date_query' => [
[
'before' => $date_before,
'inclusive' => true,
],
],
];
if (!empty($mime_type)) {
$args['post_mime_type'] = $mime_type;
}
$query = new WP_Query($args);
if (!$query->have_posts()) {
return 'Медиафайлы не найдены для удаления.';
}
$deleted = 0;
foreach ($query->posts as $attachment) {
// Проверяем, используется ли файл в контенте
$used = false;
$posts_with_attachment = get_posts([
's' => wp_get_attachment_url($attachment->ID),
'post_type' => 'any',
'post_status' => 'publish',
'posts_per_page' => 1,
]);
if (!empty($posts_with_attachment)) {
$used = true;
}
if (!$used) {
if (wp_delete_attachment($attachment->ID, true)) {
$deleted++;
}
}
}
return "Удалено медиафайлов: {$deleted}";
}
// Пример вызова функции:
echo wpbest_delete_media_by_date_and_type('2023-01-01', 'image/jpeg');
В этом коде мы ищем все вложения (attachments) до указанной даты, опционально только определённого MIME-типа, проверяем, не используется ли файл в опубликованных постах, и удаляем его. Это помогает избежать случайного удаления нужных файлов.
Плагины для управления и удаления медиафайлов
Если вам удобнее использовать готовые инструменты, рассмотрите эти плагины:
- Clearfy Pro — расширенные возможности оптимизации, включая управление медиа.
- Media Cleaner — сканирует библиотеку на предмет неиспользуемых файлов и позволяет массово их удалять.
- Force Regenerate Thumbnails — полезен для пересоздания миниатюр после очистки медиа.
Использование плагинов упрощает задачу, но всегда делайте резервную копию сайта перед массовым удалением.
Практические советы по безопасности и резервному копированию
Перед запуском массового удаления медиафайлов обязательно выполните полное резервное копирование базы данных и файлов сайта. Это позволит быстро восстановить данные в случае ошибки.
Тестируйте скрипты сначала на копии сайта или в тестовой среде. Убедитесь, что фильтры корректно выбирают нужные файлы, и что важный контент не пострадает.
Если вы используете кастомные типы записей или нестандартные места для вставки медиа, учтите это в проверках использования файлов.
Выводы
Удаление медиафайлов по дате и типу в WordPress — задача, решаемая как с помощью WP-CLI и кастомных скриптов, так и с помощью плагинов. Важно тщательно проверять, что удаляемые файлы не используются, и всегда делать резервные копии. Приведённые примеры кода и рекомендации помогут эффективно управлять медиа-библиотекой и освободить место на сервере без риска для сайта.