Как использовать WP Filesystem API для работы с файлами в WordPress

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

Что такое WP Filesystem API и зачем он нужен

WP Filesystem API — это набор функций и классов, которые позволяют взаимодействовать с файловой системой сервера в рамках WordPress. В отличие от прямого использования PHP-функций, таких как file_get_contents, fopen или unlink, API учитывает настройки хостинга, права доступа и интегрируется с системой безопасности WordPress.

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

WP Filesystem поддерживает несколько драйверов для работы с файлами:

  • Direct — прямой доступ к файловой системе (работает, если PHP имеет соответствующие права);
  • FTP и FTPS — доступ через FTP(S), если прямой доступ невозможен;
  • SSH2 — работа через SSH, если настроено.

Как инициализировать WP Filesystem API в вашем коде

Перед использованием API необходимо инициализировать объект файловой системы. Это делается с помощью функции WPUpload_rus_init_filesystem() (придуманный нами префикс для примера). Ниже пример инициализации:

function WPUpload_rus_init_filesystem() {
    global $wp_filesystem;

    require_once ABSPATH . 'wp-admin/includes/file.php';

    $creds = request_filesystem_credentials(site_url() . '/wp-admin/', '', false, false, null);

    if (!WP_Filesystem($creds)) {
        return false; // Ошибка инициализации
    }

    return $wp_filesystem;
}

Функция request_filesystem_credentials автоматически запрашивает доступные учетные данные для работы с файловой системой (например, FTP), если прямой доступ невозможен.

После успешной инициализации глобальная переменная $wp_filesystem содержит объект с методами для работы с файлами.

Основные методы для работы с файлами и папками

Рассмотрим несколько часто используемых методов API и примеры их применения.

Чтение содержимого файла

function WPUpload_rus_read_file($file_path) {
    $wp_filesystem = WPUpload_rus_init_filesystem();
    if (!$wp_filesystem) {
        return false;
    }

    if ($wp_filesystem->exists($file_path)) {
        return $wp_filesystem->get_contents($file_path);
    }

    return false;
}

Этот код проверяет, существует ли файл, и возвращает его содержимое или false при ошибке.

Запись в файл

function WPUpload_rus_write_file($file_path, $content) {
    $wp_filesystem = WPUpload_rus_init_filesystem();
    if (!$wp_filesystem) {
        return false;
    }

    return $wp_filesystem->put_contents($file_path, $content, FS_CHMOD_FILE);
}

Метод put_contents записывает данные в файл, создает его при необходимости. Третий параметр — права доступа.

Создание директории

function WPUpload_rus_create_dir($dir_path) {
    $wp_filesystem = WPUpload_rus_init_filesystem();
    if (!$wp_filesystem) {
        return false;
    }

    if (!$wp_filesystem->is_dir($dir_path)) {
        return $wp_filesystem->mkdir($dir_path, FS_CHMOD_DIR);
    }

    return true; // Папка уже есть
}

Удаление файла

function WPUpload_rus_delete_file($file_path) {
    $wp_filesystem = WPUpload_rus_init_filesystem();
    if (!$wp_filesystem) {
        return false;
    }

    if ($wp_filesystem->exists($file_path)) {
        return $wp_filesystem->delete($file_path);
    }

    return false;
}

Практическое применение: Автоматическое создание лог-файла плагина

Допустим, вы пишете плагин, в котором нужно вести лог в файл в папке wp-content/uploads/my-plugin-logs/. Используем WP Filesystem API для создания директории и записи в файл.

function WPUpload_rus_write_log($message) {
    $upload_dir = wp_upload_dir();
    $log_dir = $upload_dir['basedir'] . '/my-plugin-logs';
    $log_file = $log_dir . '/plugin.log';

    $wp_filesystem = WPUpload_rus_init_filesystem();
    if (!$wp_filesystem) {
        return false;
    }

    // Создаем папку, если нет
    if (!$wp_filesystem->is_dir($log_dir)) {
        $wp_filesystem->mkdir($log_dir, FS_CHMOD_DIR);
    }

    // Формируем строку с датой
    $date = date('Y-m-d H:i:s');
    $log_entry = "[{$date}] {$message}\n";

    if ($wp_filesystem->exists($log_file)) {
        $content = $wp_filesystem->get_contents($log_file);
        $content .= $log_entry;
    } else {
        $content = $log_entry;
    }

    return $wp_filesystem->put_contents($log_file, $content, FS_CHMOD_FILE);
}

Теперь вызов WPUpload_rus_write_log('Тестовое сообщение'); добавит строку в лог-файл, создаст нужную директорию и файл при необходимости.

Советы по безопасности при работе с WP Filesystem API

Несмотря на удобство WP Filesystem API, важно учитывать меры безопасности:

  • Всегда проверяйте и валидируйте пути и имена файлов, особенно если они получены от пользователя.
  • Не записывайте в директории, доступные из интернета, без защиты, чтобы избежать утечки данных.
  • Используйте константы FS_CHMOD_FILE и FS_CHMOD_DIR для установки корректных прав доступа.
  • Обрабатывайте ошибки и исключения, чтобы не оставлять неочищенные временные файлы или открытые дескрипторы.

Заключение

WP Filesystem API — мощный инструмент для безопасной и кросс-хостинговой работы с файлами в WordPress. Использование этого API позволит избежать проблем с правами доступа и сделает ваш код более универсальным и надежным.

Для расширения функционала и удобства можно комбинировать WP Filesystem API с плагинами оптимизации и безопасности, например, Clearfy Pro, который помогает управлять правами и оптимизировать работу сайта.

Автоматическое удаление файлов из WooCommerce после отмены заказа
18.05.2026
Как установить ограничение на тип файлов при загрузке в WordPress
06.03.2026
Как использовать фильтры для изменения путей загрузки файлов в WordPress
06.04.2026
Как установить ограничение на размер файлов в WordPress при загрузке
10.01.2026
Как удалить повторяющиеся файлы из медиабиблиотеки WordPress с помощью кода
02.04.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.