Часто возникает задача: пользователь загружает файл через форму Contact Form 7, а вам нужно автоматически сохранить этот файл в облачном хранилище Google Drive. Это удобно для централизованного хранения документов и быстрого доступа без необходимости вручную скачивать вложения из писем.
Почему стоит использовать Google Drive для хранения файлов из Contact Form 7
Google Drive — популярное и надёжное облачное хранилище с удобным интерфейсом и возможностью совместной работы. Автоматическая отправка файлов из формы туда позволяет:
- Избавиться от нагрузки на сервер сайта, не занимать место на хостинге.
- Легко делиться файлами с коллегами и клиентами.
- Использовать мощные инструменты Google для организации и поиска.
Для интеграции нам понадобится использовать Google Drive API и написать код, который будет после отправки формы загружать файл на диск.
Подготовка: как получить доступ к Google Drive API
Перед тем, как реализовывать код, нужно создать проект в Google Cloud и получить OAuth 2.0 токен доступа:
- Перейдите на Google API Console.
- Создайте новый проект.
- Включите API Google Drive для проекта.
- В разделе «Учётные данные» создайте OAuth 2.0 клиентские данные или сервисный аккаунт.
- Если используете сервисный аккаунт, скачайте JSON с ключами и добавьте его в ваш проект WordPress (например, в папку с плагином).
Далее нужно настроить права доступа для папки на Google Drive, куда будут загружаться файлы, и поделиться ей с сервисным аккаунтом (если он используется).
Реализация: как связать Contact Form 7 и Google Drive через PHP
Contact Form 7 имеет хуки, которые позволяют выполнить код после успешной отправки формы — нам нужен хук wpcf7_mail_sent. В обработчике мы получим загруженный файл и отправим его в Google Drive.
Пример кода для functions.php или плагина:
add_action('wpcf7_mail_sent', 'contactform7ru_cf7_upload_file_to_drive');
function contactform7ru_cf7_upload_file_to_drive($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$uploaded_files = $submission->uploaded_files();
if (empty($uploaded_files['your-file'])) return; // 'your-file' - имя поля загрузки
$file_path = $uploaded_files['your-file'];
// Подключаем Google Client
require_once __DIR__ . '/google-api-php-client/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/credentials.json');
$client->addScope(Google_Service_Drive::DRIVE_FILE);
$service = new Google_Service_Drive($client);
$file = new Google_Service_Drive_DriveFile();
$file->setName(basename($file_path));
$file->setParents(['ID_ПАПКИ_НА_DRIVE']); // Замените на ID вашей папки
$content = file_get_contents($file_path);
$service->files->create($file, [
'data' => $content,
'mimeType' => mime_content_type($file_path),
'uploadType' => 'multipart'
]);
}В этом примере:
- Мы получаем загруженный файл из формы по имени поля
your-file. - Используем Google API PHP Client для загрузки файла на диск.
- Указываем папку для загрузки, чтобы систематизировать файлы.
Установка Google API PHP Client
Чтобы этот код работал, нужно установить через Composer библиотеку Google API PHP Client:
composer require google/apiclient:^2.0Если вы не используете Composer, можно скачать библиотеку вручную, но лучше настроить автозагрузку.
Полезные советы и расширения функционала
Обработка нескольких файлов
Если у вас в форме несколько полей загрузки, просто переберите массив $uploaded_files и загрузите каждый файл в Google Drive по аналогии.
Логирование ошибок
Для отладки добавьте логирование ошибок Google API и обработки файлов в отдельный файл или системный лог WordPress, чтобы быстро находить проблему.
Интеграция с CRM и уведомления
После успешной загрузки файла можно отправить ссылку на него в CRM или на email менеджеру, используя встроенные хуки Contact Form 7 или сторонние плагины, например, WPRemark для расширенных уведомлений.
Заключение
Автоматическая отправка файлов из Contact Form 7 в Google Drive — полезный навык для оптимизации работы с документами и файлами от пользователей. Немного усилий на настройку Google API и написание кода решают задачу централизованного хранения и упрощают рабочие процессы.
Если нужна готовая интеграция с дополнительными возможностями, можно рассмотреть специализированные плагины на WPShop.