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

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

Как использовать WP-Cron для автоматизации задач в WordPress
04.04.2026
Как удалить загруженные файлы при удалении записи в WordPress
25.03.2026
Как установить ограничения на число постов в рубриках WordPress
26.01.2026
WooCommerce: как запретить добавление дубликатов товаров в корзину
04.05.2026
Как создать собственный плагин WordPress с названием WPFix: пошаговое руководство
26.11.2025