Медиабиблиотека WordPress со временем разрастается, и в ней накапливается множество изображений, которые уже не используются на сайте. Это может привести к увеличению объема базы данных и замедлению работы сайта. В этой статье мы разберем, как автоматизировать удаление таких старых и неиспользуемых изображений, чтобы поддерживать медиабиблиотеку в чистоте и оптимальном состоянии.
Почему важно удалять неиспользуемые изображения из медиабиблиотеки WordPress
При создании и обновлении контента на сайте вы часто загружаете изображения, которые со временем становятся неактуальными или просто перестают использоваться в записях и страницах. Эти файлы занимают место на сервере и в базе данных, что влияет на скорость бэкапов, резервное копирование и даже время загрузки сайта, если включена генерация миниатюр и метаданных.
Удаление неиспользуемых изображений позволяет:
- Освободить место на диске и в базе данных;
- Сократить время бэкапов;
- Уменьшить нагрузку на сервер;
- Облегчить управление медиабиблиотекой.
Однако делать это вручную — трудоемкая задача, особенно если сайт большой. Поэтому имеет смысл автоматизировать процесс.
Как определить, какие изображения не используются в WordPress
Определение неиспользуемых изображений — это ключевой этап. WordPress не хранит напрямую информацию о месте использования медиафайлов, если они вставлены не через стандартные поля, а, например, через кастомные мета-поля или внешние конструкторы страниц.
Основные способы определения:
- Поиск по контенту: сканирование записей, страниц, кастомных типов записей на наличие ссылок на медиафайлы.
- Проверка привязки к записи: медиафайлы, которые привязаны к записи (post_parent), скорее всего, используются.
- Анализ комментариев и пользовательских полей: иногда изображения используются в этих местах.
Для автоматизации можно использовать специальные функции и плагины.
Пример кода для автоматического удаления неиспользуемых изображений
Ниже приведен пример функции с префиксом wplessons_, которая сканирует медиабиблиотеку на неиспользуемые изображения и удаляет их. Этот код можно добавить в файл functions.php вашей темы или создать плагин.
function wplessons_get_unused_attachments() {
global $wpdb;
$unused_attachments = [];
// Получаем все ID вложений (изображений)
$attachments = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%'");
foreach ($attachments as $attachment_id) {
$file_url = wp_get_attachment_url($attachment_id);
// Проверяем, используется ли URL в содержимом сайта
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($file_url) . '%'
));
// Проверяем post_parent
$parent_id = get_post_field('post_parent', $attachment_id);
if ($count == 0 && !$parent_id) {
$unused_attachments[] = $attachment_id;
}
}
return $unused_attachments;
}
function wplessons_delete_unused_attachments() {
$unused = wplessons_get_unused_attachments();
$deleted = 0;
foreach ($unused as $attachment_id) {
if (wp_delete_attachment($attachment_id, true)) {
$deleted++;
}
}
return $deleted;
}
// Пример вызова функции для удаления
// $deleted_count = wplessons_delete_unused_attachments();
// echo "Удалено изображений: " . $deleted_count;
Этот код сначала получает все изображения, затем проверяет, встречается ли ссылка на них в содержимом записей, и есть ли у них родительская запись. Если ни то, ни другое не найдено, изображение считается неиспользуемым и удаляется.
Использование плагинов для удаления неиспользуемых изображений
Если не хотите писать код, можно использовать плагины, которые сделают работу за вас. Рекомендуем:
- Clearfy Pro — содержит модуль оптимизации медиабиблиотеки, который находит и удаляет неиспользуемые файлы.
- Media Cleaner — популярный плагин для поиска и удаления неиспользуемых медиафайлов.
Clearfy Pro удобен тем, что совместим с другими модулями оптимизации и позволяет автоматизировать процессы очистки с интерфейсом и настройками расписания. Подробнее о Clearfy Pro можно узнать на официальной странице.
Как автоматизировать процесс очистки медиабиблиотеки с помощью cron и WP-Cron
Для поддержания медиабиблиотеки в чистоте можно запускать функцию удаления неиспользуемых изображений по расписанию. Для этого в WordPress используется WP-Cron.
Пример добавления задачи в WP-Cron:
function wplessons_schedule_cleanup() {
if (!wp_next_scheduled('wplessons_cleanup_unused_images_event')) {
wp_schedule_event(time(), 'weekly', 'wplessons_cleanup_unused_images_event');
}
}
add_action('wp', 'wplessons_schedule_cleanup');
add_action('wplessons_cleanup_unused_images_event', 'wplessons_delete_unused_attachments');
Этот код запускает функцию очистки каждую неделю. Вы можете изменить частоту на daily или другую, если нужно.
Важные рекомендации перед автоматическим удалением изображений
Автоматическое удаление медиафайлов требует осторожности:
- Обязательно делайте резервную копию сайта и базы данных перед запуском подобных скриптов.
- Проверьте, что все типы контента и мета-поля, где могут использоваться изображения, учитываются при поиске.
- Рекомендуется сначала запускать функцию только для получения списка неиспользуемых изображений, чтобы вручную проверить их.
- Используйте плагин Clearfy Pro с его возможностями безопасного удаления и восстановления файлов.
Таким образом, вы минимизируете риск случайного удаления нужных файлов и обеспечите стабильную работу сайта.
Итоги и полезные ссылки
Автоматизация удаления неиспользуемых изображений помогает поддерживать WordPress-сайт в оптимальном состоянии. Воспользуйтесь приведенным примером кода или готовыми решениями, как Clearfy Pro, чтобы сделать процесс безопасным и удобным.
Дополнительные ресурсы: