Как удалить загруженные файлы при удалении записи в WordPress

В работе с 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-сайте. Если используете автоматизацию с плагинами, внимательно читайте документацию и настройки.

Используйте описанные функции, если хотите тонко контролировать удаление вложений и избежать лишних файлов на сервере.

Как удалить дубликаты записей в WordPress с помощью кода
26.02.2026
WooCommerce: Автоматическое отключение платежей при неуспешной оплате
07.05.2026
WooCommerce: автоматическое удаление товаров из корзины по времени нахождения
04.06.2026
Создать и использовать собственные типы записей в WordPress
30.12.2025
Как удалить или отключить плагины WordPress без доступа к админке
04.12.2025