Неиспользуемые изображения в медиатеке WordPress занимают лишнее место на сервере и могут замедлять работу сайта. Особенно это актуально для больших проектов, где сотни и тысячи файлов остаются без привязки к записям или страницам. В этой статье мы рассмотрим, как создать автоматическое удаление таких картинок с помощью собственного кода, а также какие плагины помогут упростить этот процесс.
Почему важно удалять неиспользуемые изображения
Каждое изображение, загруженное в WordPress, хранится на сервере и может быть связано с записями, страницами, виджетами или плагинами. Однако со временем часть этих файлов перестает использоваться: например, при удалении записей или смене контента. Если их не удалять, медиатека разрастается, что приводит к:
- Увеличению размера бэкапов и затрат на хостинг.
- Замедлению загрузки административной панели.
- Сложностям с управлением медиафайлами.
Автоматизация процесса очистки медиатеки помогает поддерживать сайт в оптимальном состоянии без лишних затрат времени.
Как найти неиспользуемые изображения в WordPress
Для определения неиспользуемых изображений нужно проверить, какие из них не привязаны к записям, страницам, галереям и не используются в контенте. Это можно сделать несколькими способами:
1. Проверка через базу данных
Изображения хранятся в таблице wp_posts с типом записи attachment. Чтобы найти изображения, которые не связаны с другими элементами, можно выполнить 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 = '_thumbnail_id')Однако такой запрос не учитывает изображения, вставленные напрямую в содержание через HTML тег <img>. Для полной проверки нужен более сложный анализ.
2. Поиск использования в содержимом записей
Можно программно проверить все записи и страницы на наличие ссылок на изображения. Для этого требуется перебрать все посты и проверить, используются ли ID вложений в содержимом. Это ресурсоёмкая задача, но она позволяет выявить даже те картинки, которые используются не через стандартные поля.
Создаем автоматическое удаление неиспользуемых картинок с помощью кода
Теперь перейдем к реализации. Мы создадим функцию wpaction_delete_unused_images, которая будет проверять медиатеку и удалять неиспользуемые изображения.
Подход к реализации
1. Получаем список всех вложений (изображений).
2. Проверяем, используются ли они в качестве миниатюры или есть ли ссылки на них в содержимом записей.
3. Если не используются — удаляем с помощью функции wp_delete_attachment.
Пример кода функции
function wpaction_is_image_used($attachment_id) {
// Проверяем, используется ли как миниатюра
$args = [
'post_type' => 'any',
'meta_key' => '_thumbnail_id',
'meta_value' => $attachment_id,
'posts_per_page' => 1
];
$query = new WP_Query($args);
if ($query->have_posts()) {
wp_reset_postdata();
return true;
}
wp_reset_postdata();
// Проверяем, встречается ли URL изображения в содержимом
$url = wp_get_attachment_url($attachment_id);
if (!$url) return false;
$args = [
'post_type' => 'any',
's' => $url,
'posts_per_page' => 1
];
$query = new WP_Query($args);
if ($query->have_posts()) {
wp_reset_postdata();
return true;
}
wp_reset_postdata();
return false;
}
function wpaction_delete_unused_images() {
$args = [
'post_type' => 'attachment',
'post_mime_type' => 'image',
'posts_per_page' => -1
];
$attachments = get_posts($args);
$deleted = 0;
foreach ($attachments as $attachment) {
if (!wpaction_is_image_used($attachment->ID)) {
wp_delete_attachment($attachment->ID, true);
$deleted++;
}
}
return $deleted;
}Эти функции можно запускать вручную или настроить их автоматический вызов по крону.
Настройка автоматического запуска с помощью WP-Cron
Чтобы не запускать очистку вручную, добавим задачу в планировщик WordPress. Для этого используем хук wp для регистрации события и функцию для его обработки.
function wpaction_schedule_image_cleanup() {
if (!wp_next_scheduled('wpaction_image_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpaction_image_cleanup_hook');
}
}
add_action('wp', 'wpaction_schedule_image_cleanup');
function wpaction_image_cleanup_callback() {
$deleted = wpaction_delete_unused_images();
if ($deleted) {
error_log("[WPAction] Удалено неиспользуемых изображений: $deleted");
}
}
add_action('wpaction_image_cleanup_hook', 'wpaction_image_cleanup_callback');Этот код запустит очистку один раз в день и будет логировать результат в файл ошибок PHP.
Полезные плагины для управления медиафайлами
Если вы предпочитаете готовые решения, рассмотрите следующие плагины, которые помогут идентифицировать и удалять неиспользуемые изображения:
- Media Cleaner — сканирует медиатеку и находит неиспользуемые файлы, имеет как бесплатную, так и платную версию.
- WPGPT Media Manager (https://wpshop.ru/plugins/wpgpt?utm_source=wpaction.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskoe-udaleniye-neispolzuemyh-kartinok-v-wordpress) — расширенный менеджер медиафайлов с функцией очистки и автоматизации.
- Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro?utm_source=wpaction.ru&utm_medium=article&utm_campaign=kak-sozdat-avtomaticheskoe-udaleniye-neispolzuemyh-kartinok-v-wordpress) — плагин для оптимизации сайта, в том числе с возможностями управления медиа.
Эти инструменты позволяют быстро очистить медиатеку и избежать ошибок, которые могут возникнуть при самостоятельном удалении файлов.
Рекомендации и предупреждения
Перед автоматическим удалением изображений обязательно сделайте резервную копию сайта и базы данных. Автоматизация может привести к удалению файлов, которые используются нестандартными способами, например, в плагинах или сторонних конструкторах страниц.
Рекомендуется сначала запускать функцию в тестовом режиме, например, выводить список файлов, которые будут удалены, без фактического удаления. Для этого можно временно заменить вызов wp_delete_attachment на логирование.
Также учитывайте, что при большом количестве вложений выполнение функции может занимать значительное время, поэтому стоит запускать её в ночное время или с помощью WP-CLI.
Заключение
Автоматическое удаление неиспользуемых изображений — важная часть поддержки WordPress-сайта. С помощью приведенного кода и рекомендаций вы сможете настроить эффективный процесс очистки медиатеки, экономя место на сервере и повышая производительность сайта.
Для упрощения работы рекомендуем рассмотреть плагины из каталога WPSHOP, которые интегрируются с WordPress и позволяют автоматизировать многие рутинные задачи.