В работе с WordPress часто возникает ситуация, когда при удалении записи (поста) остаются связанные с ней загруженные файлы, например, изображения или документы. Они продолжают занимать место на сервере, что может привести к росту объема хранилища и усложнению управления медиафайлами.
Почему стандартное удаление записи не удаляет медиафайлы
По умолчанию WordPress не удаляет прикрепленные к посту файлы при его удалении. Это сделано для того, чтобы избежать потери данных — файлы могут быть использованы и в других местах сайта. Однако, если вы уверены, что данные вложения больше не нужны, их целесообразно удалять автоматически для оптимизации ресурсов.
При удалении записи сохраняются все вложения, привязанные к ней через post_parent. Поэтому, если вы хотите автоматизировать очистку, потребуется написать кастомный код.
Пример функции для удаления вложений при удалении записи
Добавим в functions.php вашей темы или в плагин следующий код. Он будет удалять все вложения, связанные с удаляемой записью, включая файлы на сервере.
function wpfix_delete_attachments_on_post_delete( $post_id ) {
// Получаем все вложения, связанные с постом
$attachments = get_children( array(
'post_parent' => $post_id,
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => 'any'
) );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
// Удаляем вложение вместе с файлом
wp_delete_attachment( $attachment->ID, true );
}
}
}
add_action( 'before_delete_post', 'wpfix_delete_attachments_on_post_delete' );Данный хук before_delete_post срабатывает перед удалением записи. Функция ищет все вложения, у которых поле post_parent совпадает с ID удаляемой записи, и удаляет их вместе с файлами (параметр true в wp_delete_attachment).
Как проверить, что файлы действительно удаляются
Для тестирования создайте запись с вложенными файлами, затем удалите запись. После удаления проверьте папку загрузок (wp-content/uploads) через FTP или файловый менеджер — файлы, привязанные к удалённой записи, должны быть удалены.
Если файлы остались, проверьте, нет ли ошибок в логах сервера, и убедитесь, что функция подключена и активна.
Применение с плагинами очистки и оптимизации
Если вы используете плагин Clearfy Pro, он имеет встроенные инструменты для автоматической очистки неиспользуемых медиафайлов. Их можно настроить для удаления файлов, не привязанных к записям, но для полной уверенности в удалении именно связанных с удалёнными постами медиа лучше использовать описанный код.
Также, плагин Clearfy Pro поможет контролировать автоподдержку сайта и оптимизировать работу с файлами.
Как избежать удаления нужных файлов
Иногда файлы, привязанные к записи, могут использоваться в других местах сайта. Чтобы избежать случайного удаления, можно добавить проверку на использование вложения в других записях. Вот пример расширенной функции:
function wpfix_safe_delete_attachments_on_post_delete( $post_id ) {
$attachments = get_children( array(
'post_parent' => $post_id,
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => 'any'
) );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
// Проверяем, используются ли вложения в других местах
$usage = new WP_Query( array(
'post_type' => 'any',
'post_status' => 'any',
'meta_query' => array(),
'post__not_in' => array( $post_id ),
's' => basename( get_attached_file( $attachment->ID ) ),
'fields' => 'ids',
'posts_per_page' => 1
) );
if ( ! $usage->have_posts() ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
}
add_action( 'before_delete_post', 'wpfix_safe_delete_attachments_on_post_delete' );Данная функция пытается найти другие записи, где используется файл вложения, и удаляет только те, которые не найдены нигде кроме удаляемой записи. Этот подход снижает риск удаления нужных медиа.
Альтернативные решения и плагины
Если вы не хотите писать код, можно использовать плагины для управления медиафайлами:
- Media Cleaner — анализирует и удаляет неиспользуемые файлы;
- WP-Optimize — имеет инструменты очистки базы и медиафайлов;
- Force Delete Attachments — удаляет вложения принудительно.
Однако у них есть свои ограничения, и они могут не гарантировать полное удаление только связанных с удалённой записью файлов.
Рекомендации по использованию
Всегда делайте резервные копии перед массовым удалением файлов. Тестируйте код на staging-сайте. Если используете автоматизацию с плагинами, внимательно читайте документацию и настройки.
Используйте описанные функции, если хотите тонко контролировать удаление вложений и избежать лишних файлов на сервере.