Управление медиафайлами — одна из важных задач в поддержке сайта на WordPress. Со временем в библиотеке накапливается множество изображений, видео и других файлов, которые уже не используются на страницах или в записях. Это занимает место на сервере и может замедлять работу сайта, особенно при бэкапах и миграциях.
Почему важно удалять неиспользуемые медиафайлы
Если не очищать медиа библиотеку, она превращается в «мусорный» склад. Вот основные проблемы:
- Занятие дискового пространства без пользы.
- Увеличение времени резервного копирования и восстановления.
- Потенциальное влияние на производительность сайта, особенно при большом количестве записей.
- Риск путаницы при выборе нужных файлов в админке.
Автоматизация удаления старых и неиспользуемых файлов решает эти проблемы и экономит время администратору.
Как определить, какие медиафайлы не используются
В WordPress медиафайлы могут быть привязаны к постам, страницам, товарам и другим объектам. Неиспользуемые файлы — те, которые не прикреплены ни к одному объекту и не вставлены в контент.
Можно использовать SQL-запросы для поиска таких файлов или специализированные функции PHP.
Пример SQL-запроса для поиска неиспользуемых медиафайлов
SELECT ID, post_title FROM wp_posts WHERE post_type = 'attachment' AND ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key='_wp_attached_file');Этот запрос найдет вложения, которые не привязаны к файлам. Но он не учитывает случаи, когда файлы вставлены вручную в контент.
Использование PHP для проверки использования медиа
Можно написать функцию, которая проверяет, встречается ли URL файла в базе постов.
function wpbe_is_media_used($attachment_id) {
$attachment_url = wp_get_attachment_url($attachment_id);
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment_url) . '%'
));
return $count > 0;
}Такой подход помогает точнее определить, используется ли файл в содержимом сайта.
Автоматизация удаления с помощью WP-Cron
Чтобы регулярно очищать библиотеку, можно настроить задачу, которая будет запускаться по расписанию и удалять старые или неиспользуемые медиа.
Пример кода для WP-Cron задачи
function wpbe_delete_old_unused_media() {
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'date_query' => array(
array(
'before' => '1 year ago',
),
),
);
$attachments = get_posts($args);
foreach ($attachments as $attachment) {
if (!wpbe_is_media_used($attachment->ID)) {
wp_delete_attachment($attachment->ID, true);
}
}
}
// Регистрация события при активации плагина или темы
if (!wp_next_scheduled('wpbe_daily_media_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpbe_daily_media_cleanup');
}
add_action('wpbe_daily_media_cleanup', 'wpbe_delete_old_unused_media');Этот скрипт раз в день удаляет вложения старше года, которые не используются.
Рекомендации по плагинам для управления медиа
Если не хочется писать код, можно использовать проверенные плагины с функциями очистки:
- Clearfy Pro — включает инструменты для оптимизации базы данных и очистки неиспользуемых медиа.
- WPRemark — плагин с расширенными возможностями по управлению контентом, включая медиа.
Важно перед массовым удалением делать резервную копию сайта, чтобы избежать потери нужных данных.
Как избежать случайного удаления нужных файлов
Автоматическая очистка требует осторожности, чтобы не удалить активные медиа. Вот несколько советов:
- Используйте проверку использования файлов в контенте и метаданных.
- Ограничьте удаление только к файлам старше определенного срока.
- Реализуйте логику исключения файлов, помеченных как важные (например, через кастомное поле).
- Тестируйте сценарии на копии сайта перед применением на боевом.
Дополнительные рекомендации и полезные функции
Можно расширить функционал, добавив уведомления на почту после очистки, чтобы администратор видел, какие файлы были удалены.
function wpbe_send_cleanup_report($deleted_attachments) {
$to = get_option('admin_email');
$subject = 'Отчет об удалении медиа файлов';
$message = "Удалены следующие файлы:\n" . implode("\n", $deleted_attachments);
wp_mail($to, $subject, $message);
}Также можно добавить страницу настроек в админке для управления параметрами очистки — например, периодом удаления, исключениями, типами файлов и т.д.
Итог: автоматизация удаления старого и неиспользуемого медиа в WordPress помогает поддерживать сайт в порядке, экономит место и время. Реализовать ее можно как с помощью кода, так и с помощью плагинов, стоит лишь внимательно тестировать и настраивать процесс.