В процессе работы с WordPress накапливается большое количество медиафайлов, особенно изображений, которые со временем могут оказаться неиспользуемыми и занимать место на сервере. Ручное удаление таких файлов — утомительный и рискованный процесс, особенно если не знаешь, какие из них реально не используются. В этой статье мы разберем, как автоматизировать удаление старых изображений в WordPress, используя практические методы и примеры кода.
Почему важно удалять неиспользуемые изображения в WordPress
Медиатека WordPress может содержать тысячи файлов — фотографии, скриншоты, изображения для постов, превью и прочее. Многие из них перестают использоваться после удаления или обновления контента, но остаются на сервере, занимая место. Это приводит к следующим проблемам:
- Перегрузка дискового пространства — особенно актуально для хостингов с ограничениями.
- Замедление работы сайта — большое количество файлов влияет на бэкапы и индексирование.
- Сложности с управлением медиатекой — сложно ориентироваться и находить нужные файлы.
Автоматизация процесса очистки помогает поддерживать сайт в оптимальном состоянии без лишних усилий.
Как определить неиспользуемые и старые изображения в WordPress
Прежде чем удалять файлы, важно понять, какие изображения являются неиспользуемыми или устаревшими. Обычно к ним относятся:
- Файлы, не связанные с записями, страницами, виджетами или меню.
- Изображения, которые не были прикреплены к публикациям и не вставлены в контент.
- Файлы, загруженные более определенного срока назад (например, старше 1 года), если они не используются.
Для выявления таких файлов можно применить SQL-запросы к базе данных, плагины и кастомный PHP-код.
Использование SQL для поиска неиспользуемых медиафайлов
WordPress хранит информацию о медиафайлах в таблице wp_posts с типом записи attachment. Чтобы найти изображения, которые не прикреплены к публикациям, можно выполнить такой запрос:
SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0;Этот запрос покажет все вложения без родительской записи, но он не учитывает, используются ли файлы вручную в контенте.
Использование плагинов для поиска неиспользуемых изображений
Для большинства пользователей удобнее использовать специализированные плагины. Среди популярных инструментов:
- Media Cleaner — проводит сканирование медиатеки и контента, выявляя неиспользуемые файлы.
- Unused Media Cleaner — простой инструмент для удаления неиспользуемых медиафайлов.
Однако такие плагины требуют осторожного использования — всегда делайте резервную копию перед удалением.
Пример кода для автоматического удаления старых изображений
Если вы хотите создать кастомное решение, например, для удаления изображений старше определенного срока и не прикрепленных к записям, можно использовать следующий пример PHP-кода. Его удобно добавить в файл functions.php вашей темы или в отдельный плагин.
function wpcodes_delete_old_unattached_images() {
global $wpdb;
$days = 365; // удалить файлы старше 365 дней
$date_threshold = date('Y-m-d H:i:s', strtotime('-'. $days .' days'));
$attachments = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_parent = 0 AND post_date < %s",
$date_threshold
));
foreach ($attachments as $attachment) {
// Проверяем, что файл не используется в контенте
$file_url = wp_get_attachment_url($attachment->ID);
$posts_using = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
if ($posts_using == 0) {
wp_delete_attachment($attachment->ID, true);
}
}
}
// Запускать функцию раз в сутки с помощью WP-Cron
add_action('wpcodes_daily_cleanup', 'wpcodes_delete_old_unattached_images');
if (!wp_next_scheduled('wpcodes_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcodes_daily_cleanup');
}В этом коде мы ищем вложения без родителя, которые старше 365 дней, затем проверяем, используются ли они в содержимом других записей, и удаляем, если не используются. Запуск происходит раз в сутки через WP-Cron.
Расширенные методы автоматизации с помощью WP-CLI и плагинов
Для больших сайтов с сотнями тысяч файлов автоматизация через панель администратора не всегда удобна. В таких случаях стоит рассмотреть:
- WP-CLI — командная строка для управления WordPress. Можно написать скрипт, который будет искать и удалять неиспользуемые изображения по расписанию.
- Плагины с поддержкой автоматизации — например, Clearfy Pro предоставляет расширенные возможности по оптимизации и очистке сайта, включая работу с медиатекой.
WP-CLI пример для удаления вложений без родителя:
wp media list --field=ID --post_parent=0 | xargs -d '\n' -I % wp media delete % --force<Этот однострочник удалит все вложения без родителя. Перед использованием обязательно сделайте резервную копию базы и файлов.
Рекомендации по безопасности и резервному копированию
Удаление медиафайлов — процесс необратимый, поэтому соблюдайте следующие рекомендации:
- Всегда делайте полное резервное копирование базы данных и файлов сайта перед массовым удалением.
- Проверяйте, что файлы действительно не используются в виджетах, кастомных полях, шаблонах и других местах.
- Тестируйте автоматизацию сначала на тестовом или локальном сайте.
- Используйте функции WordPress для удаления вложений (
wp_delete_attachment) вместо прямого удаления файлов, чтобы не оставить «битых» ссылок.
Выводы
Автоматизация удаления старых и неиспользуемых изображений помогает поддерживать WordPress-сайт в чистоте и порядке, экономить место на сервере и ускорять работу. Используйте готовые плагины для удобства или создавайте кастомные решения, учитывая специфику вашего сайта. Обязательно тестируйте все действия и делайте резервные копии, чтобы избежать потери важных данных.