Что такое attachment в WordPress и почему важно их удалять
В WordPress attachment — это файлы, которые загружаются в медиатеку и связаны с записями, страницами или другими типами контента. Обычно это изображения, документы, аудио или видео. Со временем на сайте может накопиться большое количество attachment, которые больше не используются ни в одном посте или странице. Они занимают место на сервере, могут замедлять работу сайта и усложнять управление медиафайлами.
Удаление таких неиспользуемых attachment помогает оптимизировать базу данных и файловую систему, улучшить производительность и снизить затраты на хостинг.
В этой статье рассмотрим, как в WordPress найти и удалить неиспользуемые attachment программно и с помощью плагинов, а также приведём примеры кода для автоматизации процесса.
Как определить, какие attachment считаются неиспользуемыми
К attachment, неиспользуемым в контенте, можно отнести файлы, которые не связаны с записями или страницами посредством стандартных полей или шорткодов. Однако бывают сложности, так как иногда изображения могут быть вставлены вручную в текст, а не через медиа-библиотеку, или использоваться в виджетах, настройках темы и плагинов.
Основные критерии неиспользуемых attachment:
- Отсутствие связи в таблице
wp_postsс родительскими постами (post_parent = 0) - Файл не вставлен в контент через
post_contentдругих записей - Файл не используется в миниатюрах (
post_thumbnail_id) - Отсутствие ссылок на файл в базе данных и на сайте
Следовательно, для проверки нужно анализировать несколько таблиц и поля, что требует аккуратного подхода.
Как найти неиспользуемые attachment с помощью SQL-запроса
Самый простой способ — выполнить SQL-запрос, который выявит attachment, у которых нет родительской записи и которые не используются как миниатюры:
SELECT ID, post_title, guid FROM wp_posts WHERE post_type = 'attachment' AND post_parent = 0 AND ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key = '_thumbnail_id');Этот запрос вернёт список attachment без родителя и не используемых как миниатюры. Однако он не учитывает вставки в post_content и ссылки в других местах.
Для более точного поиска можно дополнительно проверить наличие ссылок на файлы attachment в post_content других записей, например так:
SELECT a.ID, a.post_title FROM wp_posts a WHERE a.post_type = 'attachment' AND a.post_parent = 0 AND a.ID NOT IN (SELECT meta_value FROM wp_postmeta WHERE meta_key = '_thumbnail_id') AND NOT EXISTS (SELECT 1 FROM wp_posts p WHERE p.post_content LIKE CONCAT('%', a.guid, '%'));Этот запрос проверяет, не встречается ли URL attachment в содержимом других постов.
Автоматизация удаления неиспользуемых attachment с помощью PHP-кода
Для автоматической очистки можно написать функцию, которая будет искать и удалять неиспользуемые attachment. Ниже пример такой функции с префиксом wpset_ для именования функций:
function wpset_delete_unused_attachments() {
global $wpdb;
// Получаем attachment, которые не имеют родителя и не используются как миниатюры
$attachments = $wpdb->get_results(
"SELECT ID, guid FROM {$wpdb->posts} WHERE post_type = 'attachment' AND post_parent = 0 AND ID NOT IN (SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_thumbnail_id')"
);
foreach ($attachments as $attachment) {
// Проверяем, используется ли файл в содержимом других постов
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
'%' . $wpdb->esc_like($attachment->guid) . '%'
));
if (!$count) {
// Удаляем attachment полностью
wp_delete_attachment($attachment->ID, true);
error_log("[Wpset] Удалён неиспользуемый attachment ID: {$attachment->ID}");
}
}
}Эту функцию можно запускать вручную или по крону. Она безопасно удалит только те вложения, которые не используются нигде на сайте.
Использование плагинов для удаления неиспользуемых attachment
Если не хочется писать код, можно воспользоваться плагинами, которые автоматизируют процесс поиска и удаления:
- Media Cleaner — анализирует медиатеку и контент, находит неиспользуемые файлы и предлагает их удалить. Имеет бесплатную и PRO-версию.
- DNUI (Delete Not Used Image) — простой плагин для удаления неиспользуемых медиафайлов.
- WPOptimize — включает инструменты для очистки базы и медиа.
При использовании плагинов рекомендую делать резервные копии сайта, так как некоторые файлы могут использоваться динамически и не всегда корректно идентифицируются.
Рекомендации по безопасности и резервному копированию
Удаление attachment — необратимая операция, поэтому перед выполнением любых действий обязательно создайте резервную копию базы данных и файлов сайта. Это позволит восстановить удалённые данные при ошибках.
Также тестируйте удаление на копии сайта, чтобы убедиться, что важные файлы не будут удалены.
Пример интеграции с плагином Clearfy Pro для оптимизации медиа
Плагин Clearfy Pro предлагает расширенные инструменты для оптимизации WordPress, включая очистку неиспользуемых медиафайлов. После установки и активации плагина вы получите удобный интерфейс для анализа и удаления attachment без риска повредить сайт.
Такой подход удобен для тех, кто предпочитает GUI-инструменты и расширенные настройки безопасности.
Заключение
Удаление неиспользуемых attachment — важный этап оптимизации WordPress-сайта. Используйте комбинацию SQL-запросов, PHP-функций и специализированных плагинов для эффективного и безопасного удаления лишних медиафайлов. Не забывайте о резервных копиях и тестировании на локальной копии сайта.