Как автоматизировать создание и удаление временных файлов в WordPress

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

Почему важно контролировать временные файлы в WordPress

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

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

В WordPress нет встроенных методов комплексного управления временными файлами, но с помощью хуков, CRON задач и правильного кода можно реализовать удобную и надежную систему.

Создание временных файлов с префиксом и хранение в wp-content/uploads

Лучше всего временные файлы создавать в папке wp-content/uploads/tmp или в похожей директории, которая не удаляется при обновлениях, и доступ к которой можно ограничить через .htaccess.

Для создания временного файла используем функцию wptavern_create_temp_file(), которая гарантирует уникальное имя файла с префиксом и запись содержимого:

function wptavern_create_temp_file( $content, $prefix = 'wptavern_tmp_' ) {
    $upload_dir = wp_upload_dir();
    $tmp_dir = trailingslashit( $upload_dir['basedir'] ) . 'tmp/';

    if ( ! file_exists( $tmp_dir ) ) {
        wp_mkdir_p( $tmp_dir );
    }

    $filename = $prefix . uniqid() . '.tmp';
    $filepath = $tmp_dir . $filename;

    file_put_contents( $filepath, $content );

    return $filepath;
}

Такой подход помогает структурировать временные файлы и легко их находить для последующего удаления.

Автоматическое удаление старых временных файлов через WP-Cron

Чтобы не накапливать мусор, нужно запускать периодическую очистку временных файлов. Сделаем это через планировщик задач WordPress — WP-Cron.

Создадим функцию wptavern_cleanup_temp_files(), которая удалит файлы старше заданного времени (например, 1 день):

function wptavern_cleanup_temp_files() {
    $upload_dir = wp_upload_dir();
    $tmp_dir = trailingslashit( $upload_dir['basedir'] ) . 'tmp/';

    if ( ! file_exists( $tmp_dir ) ) {
        return;
    }

    $files = glob( $tmp_dir . 'wptavern_tmp_*.tmp' );
    $now = time();
    $max_age = 24 * 3600; // 24 часа

    foreach ( $files as $file ) {
        if ( $now - filemtime( $file ) > $max_age ) {
            @unlink( $file );
        }
    }
}

// Регистрируем событие, если еще не зареган
if ( ! wp_next_scheduled( 'wptavern_cleanup_temp_files_hook' ) ) {
    wp_schedule_event( time(), 'hourly', 'wptavern_cleanup_temp_files_hook' );
}

add_action( 'wptavern_cleanup_temp_files_hook', 'wptavern_cleanup_temp_files' );

Этот код запускает очистку каждый час, удаляя временные файлы старше суток.

Ограничение доступа к временным файлам через .htaccess

Чтобы защитить временные файлы от прямого доступа извне, нужно добавить в папку tmp файл .htaccess с таким содержимым:

deny from all

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

Пример использования временных файлов для экспорта данных

Рассмотрим пример задачи — экспорт товаров WooCommerce в CSV, с временным сохранением файла для последующей загрузки пользователем.

Функция создания файла:

function wptavern_export_products_csv() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    );

    $products = get_posts( $args );
    if ( empty( $products ) ) {
        return false;
    }

    $csv = "ID,Name,Price\n";

    foreach ( $products as $product_post ) {
        $product = wc_get_product( $product_post->ID );
        $csv .= sprintf(
            "%s,%s,%s\n",
            $product->get_id(),
            esc_csv( $product->get_name() ),
            $product->get_price()
        );
    }

    return wptavern_create_temp_file( $csv, 'products_export_' );
}

function esc_csv( $value ) {
    $value = str_replace( '"', '""', $value );
    if ( preg_match( '/[",\r\n]/', $value ) ) {
        $value = '"' . $value . '"';
    }
    return $value;
}

После вызова wptavern_export_products_csv() вы получите путь к временному CSV-файлу, который можно выдать пользователю для скачивания.

Вывод на страницу ссылки для скачивания временного файла

Для предоставления пользователю ссылки на скачивание временного файла можно использовать простой обработчик:

function wptavern_handle_download() {
    if ( ! isset( $_GET['wptavern_download'] ) ) {
        return;
    }

    $file = sanitize_text_field( wp_unslash( $_GET['wptavern_download'] ) );
    $upload_dir = wp_upload_dir();
    $tmp_dir = trailingslashit( $upload_dir['basedir'] ) . 'tmp/';
    $filepath = realpath( $tmp_dir . $file );

    if ( strpos( $filepath, realpath( $tmp_dir ) ) !== 0 || ! file_exists( $filepath ) ) {
        wp_die( 'Файл не найден.' );
    }

    header( 'Content-Description: File Transfer' );
    header( 'Content-Type: application/octet-stream' );
    header( 'Content-Disposition: attachment; filename="' . basename( $filepath ) . '"' );
    header( 'Expires: 0' );
    header( 'Cache-Control: must-revalidate' );
    header( 'Pragma: public' );
    header( 'Content-Length: ' . filesize( $filepath ) );
    readfile( $filepath );
    exit;
}
add_action( 'init', 'wptavern_handle_download' );

На странице можно вывести ссылку вида:

<a href="?wptavern_download=products_export_5f6d7e8c9b.tmp">Скачать экспорт товаров</a>

Поддержка плагина Clearfy Pro для улучшения управления временными файлами

Плагин Clearfy Pro содержит расширенные инструменты оптимизации, в том числе по очистке временных файлов и кэша. Его можно использовать для дополнительной автоматизации и контроля, особенно если вы не хотите писать собственный код для WP-Cron.

Итог

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

  • Создавать временные файлы в организованной структуре;
  • Автоматически очищать их через WP-Cron;
  • Защищать доступ к временным файлам;
  • Использовать временные файлы для удобных задач, например, экспорта данных;
  • Подключать готовые решения, такие как Clearfy Pro, для расширения функционала.

Такой подход поможет избежать накопления мусора, повысить безопасность и упростить техническое сопровождение WordPress-проекта.

Как избежать проблем со столкновением плагинов в WordPress
07.04.2026
Как использовать хук WooCommerce 'woocommerce_product_query' для кастомизации списка товаров
04.06.2026
Удаление неиспользуемых терминов таксономий в WordPress
03.04.2026
Как установить ограничение на регистрацию в WordPress по доменным именам
07.03.2026
Автообновление статуса заказа в WooCommerce: практическое руководство
31.05.2026