wpdownload.ru wordpress WPDownload.ru

Как автоматически удалять неиспользуемые папки в WordPress Media

В WordPress медиафайлы сохраняются в папках внутри директории wp-content/uploads. Со временем, особенно на крупных сайтах, в этих папках скапливаются неиспользуемые файлы и даже целые папки, которые больше не привязаны к записям или страницам. Они занимают место на диске и могут замедлять работу бэкапов и оптимизацию сайта. В этой статье разберём, как автоматически находить и удалять такие неиспользуемые папки с помощью кода и плагинов.

Почему появляются неиспользуемые папки в WordPress Media

Обычно WordPress создаёт папки по году и месяцу загрузки, например 2024/06. Но часто в процессе импорта, миграций, или после удаления плагинов, которые добавляли свои медиа, остаются папки с файлами, которые не используются в контенте сайта. Например:

  • Остаточные папки с импортированными изображениями, которые были удалены из постов.
  • Папки с временными файлами или неудачными загрузками.
  • Папки, созданные сторонними плагинами, которые уже не активны.

Ручная очистка таких папок — трудоёмкий процесс. Автоматизация поможет поддерживать чистоту и порядок.

Как проверить, какие папки не используются в WordPress

Основная задача — определить, какие папки содержат файлы, не привязанные к медиа-записям (post_type = attachment) в базе данных. Для этого нужно:

  1. Собрать список всех папок в wp-content/uploads и вложенных директориях.
  2. Получить из базы данных пути всех медиафайлов, которые используются в записях.
  3. Сравнить, какие папки содержат только неиспользуемые файлы.

Для упрощения задачи можно использовать PHP-код или специальные плагины.

Пример функции для поиска неиспользуемых папок

function wpdownload_get_unused_media_folders() {
    $upload_dir = wp_upload_dir();
    $base_dir = $upload_dir['basedir'];

    // Получаем все папки внутри uploads
    $all_folders = array_filter(glob($base_dir . '/**', GLOB_ONLYDIR | GLOB_NOSORT));

    global $wpdb;
    // Получаем все пути к медиафайлам из базы
    $media_files = $wpdb->get_col("SELECT meta_value FROM {$wpdb->postmeta} WHERE meta_key = '_wp_attached_file'");

    $used_folders = [];
    foreach ($media_files as $file) {
        $folder = dirname($base_dir . '/' . $file);
        $used_folders[$folder] = true;
    }

    $unused_folders = [];
    foreach ($all_folders as $folder_path) {
        if (!isset($used_folders[$folder_path])) {
            $unused_folders[] = $folder_path;
        }
    }

    return $unused_folders;
}

Эта функция вернёт список папок, в которых нет файлов, привязанных к записям.

Как автоматически удалять неиспользуемые папки

Удалять папки следует с осторожностью, чтобы не потерять нужные данные. Рекомендуется сначала выводить список таких папок и подтверждать удаление вручную.

Пример функции удаления папок

function wpdownload_delete_unused_folders() {
    $unused_folders = wpdownload_get_unused_media_folders();
    foreach ($unused_folders as $folder) {
        // Удаляем папку и все её содержимое
        wpdownload_rrmdir($folder);
    }
}

function wpdownload_rrmdir($dir) {
    if (is_dir($dir)) {
        $objects = scandir($dir);
        foreach ($objects as $object) {
            if ($object !== '.' && $object !== '..') {
                $path = $dir . DIRECTORY_SEPARATOR . $object;
                if (is_dir($path)) {
                    wpdownload_rrmdir($path);
                } else {
                    unlink($path);
                }
            }
        }
        rmdir($dir);
    }
}

Эти функции рекурсивно удалят все неиспользуемые папки и их содержимое.

Использование плагинов для очистки медиа и папок

Если писать код не хочется или нет доступа к серверу, можно использовать плагины, которые помогут выявить и очистить неиспользуемые медиафайлы и папки:

  • Clearfy Pro — многофункциональный плагин для оптимизации сайта, включая очистку неиспользуемых медиафайлов.
  • WPRemark — для аудита и оценки контента, помогает найти неиспользуемые вложения.

Обратите внимание, что эти плагины чаще работают с отдельными файлами, а не с папками целиком. Поэтому для автоматизации удаления папок может потребоваться кастомный скрипт.

Рекомендации по безопасности и бэкапу

Перед автоматическим удалением папок обязательно сделайте резервную копию сайта и базы данных. Удаление медиа может привести к потере важных изображений, если скрипт ошибочно определит их как неиспользуемые.

Также рекомендуем запускать очистку в тестовой среде, чтобы проверить корректность работы функций.

Автоматизация с помощью WP-Cron

Чтобы регулярно поддерживать чистоту, можно настроить автоматический запуск проверки и удаления неиспользуемых папок с помощью WP-Cron:

function wpdownload_schedule_media_cleanup() {
    if (!wp_next_scheduled('wpdownload_media_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpdownload_media_cleanup_hook');
    }
}
add_action('wp', 'wpdownload_schedule_media_cleanup');

add_action('wpdownload_media_cleanup_hook', 'wpdownload_delete_unused_folders');

Такой подход позволит запускать очистку автоматически раз в сутки.

Заключение

Автоматическое удаление неиспользуемых папок в WordPress media — эффективный способ освободить место и оптимизировать структуру файлов. Используйте предложенные функции и плагины, тщательно тестируйте и обязательно делайте резервные копии.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше