В процессе работы с WordPress одна из частых технических проблем — накопление большого количества неиспользуемых или устаревших изображений в медиабиблиотеке. Это влияет на размер базы данных, скорость загрузки сайта и усложняет управление контентом. В этой статье мы подробно разберем, как автоматизировать удаление таких изображений по расписанию с помощью кода и плагинов, а также как избежать ошибок при этом процессе.
Почему важно удалять старые изображения в WordPress
С течением времени на сайте накапливаются лишние медиафайлы: изображения, которые больше не используются в постах, страницах или галереях. Они занимают место на сервере и в базе данных, а также могут замедлять работу сайта, особенно при резервном копировании и синхронизации. Автоматизация удаления таких файлов помогает поддерживать порядок и оптимизировать ресурсы.
Ручное удаление — трудоемкий процесс, особенно если сайт большой. Автоматизация с помощью WP Cron и кастомных функций решает эту проблему.
Использование WP Cron для автоматического удаления старых изображений
WordPress имеет встроенную систему планировщика задач — WP Cron. С ее помощью можно создавать регулярные события, например, раз в день запускать функцию, которая будет искать и удалять файлы, не используемые более определенного времени.
Создаем функцию удаления
Пример функции wpelement_delete_old_images, которая удаляет изображения старше 30 дней и не привязанные к постам:
function wpelement_delete_old_images() {
global $wpdb;
$days = 30; // Количество дней для хранения изображений
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
// Получаем ID вложений-изображений, созданных раньше пороговой даты
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' AND post_date < %s",
$date_threshold
));
foreach ($attachments as $attachment) {
$id = $attachment->ID;
// Проверяем, используется ли изображение в каких-либо постах
$is_used = wpelement_is_image_used($id);
if (!$is_used) {
wp_delete_attachment($id, true); // Удаляем навсегда
}
}
}
function wpelement_is_image_used($attachment_id) {
global $wpdb;
$attachment_url = wp_get_attachment_url($attachment_id);
if (!$attachment_url) return false;
// Ищем в контенте постов упоминания URL изображения
$like = '%' . $wpdb->esc_like($attachment_url) . '%';
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $wpdb->posts WHERE post_content LIKE %s AND post_status = 'publish'",
$like
));
return ($count > 0);
}
Эта функция сначала выбирает все изображения старше 30 дней, затем проверяет, есть ли в опубликованных постах ссылки на них. Если нет — удаляет.
Добавляем задачу в WP Cron
Теперь нужно зарегистрировать событие, чтобы функция запускалась автоматически, например, раз в сутки.
function wpelement_schedule_image_cleanup() {
if (!wp_next_scheduled('wpelement_daily_image_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpelement_daily_image_cleanup');
}
}
add_action('wp', 'wpelement_schedule_image_cleanup');
add_action('wpelement_daily_image_cleanup', 'wpelement_delete_old_images');
Эта часть кода проверит, есть ли уже запланированное событие, и если нет — создаст его. Также привяжет выполнение нашей функции к событию.
Плагины для удаления неиспользуемых изображений
Если вы не хотите писать код, есть несколько плагинов, которые помогут автоматизировать удаление неиспользуемых медиафайлов:
- Media Cleaner — анализирует медиабиблиотеку и удаляет неиспользуемые файлы, поддерживает автоматизацию.
- WP-Optimize — комплексный плагин для оптимизации базы данных и файлов, включая очистку медиа.
- Imsanity — оптимизирует изображения, но также помогает контролировать размеры и удалять старые.
При использовании плагинов обязательно создавайте резервные копии, так как удаление — необратимый процесс.
Рекомендации по безопасности и бэкапам
Удаление медиафайлов — операция, которая может повлиять на отображение сайта. Рекомендуется:
- Перед началом автоматического удаления сделать полное резервное копирование сайта и базы данных.
- Проверить работу функции на тестовом сайте или в локальной среде.
- Регулярно мониторить результаты работы автоматизации (логи, количество удаленных файлов).
Также можно расширить функцию, добавив уведомления на email после каждого запуска, что позволит контролировать процесс.
Заключение
Автоматизация удаления старых изображений в WordPress помогает поддерживать сайт в оптимальном состоянии, экономит место на сервере и облегчает администрирование. С помощью WP Cron и кастомных функций вы можете настроить гибкую очистку именно под свои нужды. Если предпочитаете готовые решения — используйте проверенные плагины с регулярным бэкапом.
Для расширенных возможностей оптимизации и управления медиафайлами рекомендуем ознакомиться с Clearfy Pro — плагином, который позволяет не только очищать базу, но и настраивать производительность сайта комплексно.