В процессе работы с WordPress сайт накапливает большое количество медиафайлов — изображений, видео, документов, которые часто перестают использоваться, но остаются в библиотеке. Это приводит к увеличению размера базы данных и расходу дискового пространства на сервере. В этой статье подробно рассмотрим, как автоматизировать удаление старых неиспользуемых медиафайлов, чтобы поддерживать сайт в оптимальном состоянии без лишних затрат времени.
Почему важно удалять неиспользуемые медиафайлы в WordPress
Медиафайлы занимают значительный объем хранилища сайта. С течением времени они могут стать неактуальными или неиспользуемыми в контенте, но при этом не удаляться автоматически. Это приводит к ряду проблем:
- Занятие дискового пространства: особенно актуально для хостингов с ограниченным объемом;
- Усложнение управления медиатекой: сложно найти нужные файлы среди тысяч неиспользуемых;
- Потенциальное снижение производительности: при большом количестве файлов могут замедляться операции с библиотекой;
- Безопасность: старые файлы могут содержать уязвимости или использоваться злоумышленниками.
Вручную удалять такие файлы неудобно и опасно — можно случайно удалить нужный файл. Поэтому разумно использовать автоматизацию.
Как определить неиспользуемые медиафайлы в WordPress
Чтобы автоматически удалять неиспользуемые файлы, сначала нужно их определить. Неиспользуемыми считаются файлы, которые:
- Не вставлены ни в одну запись, страницу или пользовательский тип записи;
- Не используются в качестве миниатюр (featured image);
- Не задействованы в метаданных (например, в элементах конструктора страниц);
- Не прикреплены к активным записям или страницам.
Для поиска таких файлов можно использовать плагины или писать собственный код, который будет сканировать базу и проверять связи.
Плагины для автоматического поиска и удаления неиспользуемых медиафайлов
Среди популярных решений можно выделить следующие плагины:
- Media Cleaner — один из самых известных. Он сканирует библиотеку медиа и контент, выявляя неиспользуемые файлы, предлагает безопасное удаление или перенос в карантин.
- DNUI (Delete Not Used Image) — бесплатный и простой плагин, ищет картинки, не привязанные к записям.
- WP-Optimize — комплексный плагин для оптимизации базы данных и медиа, в том числе умеет удалять неиспользуемые изображения.
Однако автоматизация должна быть безопасной, поэтому рекомендуется делать резервные копии сайта перед массовым удалением.
Как автоматизировать удаление с помощью Cron и собственного кода
Если хочется более гибкого и интегрированного решения, можно написать собственный скрипт и запускать его по расписанию через WordPress Cron.
Пример функции для поиска неиспользуемых медиафайлов
function wpbit_find_unused_media() {
global $wpdb;
// Получаем все вложения
$attachments = get_posts(array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => 'inherit',
));
$unused = array();
foreach ($attachments as $attachment) {
$id = $attachment->ID;
$meta = get_post_meta($id);
// Проверяем, используется ли в контенте
$url = wp_get_attachment_url($id);
$query = $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_content LIKE %s LIMIT 1",
'%' . $wpdb->esc_like($url) . '%'
);
$used = $wpdb->get_var($query);
// Проверяем также использование как миниатюры
$thumbnail_used = $wpdb->get_var($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_thumbnail_id' AND meta_value=%d LIMIT 1",
$id
));
if (!$used && !$thumbnail_used) {
$unused[] = $id;
}
}
return $unused;
}
Эта функция ищет вложения, которые не связаны с контентом и не используются как миниатюры. Далее можно написать функцию удаления с учетом проверки и безопасности.
Автоматическое удаление по расписанию
Для запуска задачи по Cron добавим следующий код:
function wpbit_schedule_unused_media_cleanup() {
if (!wp_next_scheduled('wpbit_cleanup_unused_media_hook')) {
wp_schedule_event(time(), 'daily', 'wpbit_cleanup_unused_media_hook');
}
}
add_action('wp', 'wpbit_schedule_unused_media_cleanup');
add_action('wpbit_cleanup_unused_media_hook', 'wpbit_delete_unused_media');
function wpbit_delete_unused_media() {
$unused = wpbit_find_unused_media();
foreach ($unused as $attachment_id) {
wp_delete_attachment($attachment_id, true);
}
}
Этот код будет ежедневно удалять неиспользуемые медиафайлы. Важно убедиться, что функция wpbit_find_unused_media() корректно определяет неиспользуемые файлы, чтобы не удалить нужные.
Интеграция с плагином Clearfy Pro для улучшения безопасности и оптимизации
Для комплексной оптимизации сайта можно использовать Clearfy Pro. Этот плагин предлагает инструменты для оптимизации базы данных, управления медиа и повышения безопасности.
В Clearfy есть опция для очистки неиспользуемых изображений и кеша, что отлично дополнит нашу автоматизацию удаления.
Рекомендации по безопасности и резервному копированию
Перед тем как запускать автоматическое удаление, обязательно сделайте резервную копию сайта и базы данных. Даже проверенный код может привести к ошибкам, и важные файлы могут быть удалены по ошибке.
Рекомендуется предварительно запускать функцию поиска и просматривать список неиспользуемых файлов перед удалением.
Выводы
Автоматизация удаления старых неиспользуемых медиафайлов способствует поддержанию производительности и снижению затрат на хранилище. Комбинация плагинов и собственного кода с планировщиком задач позволяет эффективно решать эту проблему. Обязательно тестируйте решения и сохраняйте резервные копии.