Отправка файлов
Как прикрепить файл к письму
Если надо отправить файл, который пользователь загрузил через форму, то в поле "Прикрепленные файлы" прописываем название поля, ему соответствующее, например [file]
.
Если надо отправить файл, уже находящийся на сервере, то можно указать к нему путь относительно папки wp-content
или относительно корня сайта.
Примеры как можно указывать файлы в поле "Прикрепленные файлы":
[your-file][your-another-file]
/home/you/dir/dir/dir/fantasticpicture.jpg
uploads/2013/08/08/boringguide.pdf
В пути и названиях файлов не должно быть пробелов и русских букв!
Отправка нескольких файлов
Чтобы отправить несколько файлов, уже находящихся на сервере, в редакторе формы в поле "Прикрепленные файлы" пишем их как указано выше, только каждый новый файл указываем в новой строке.
Если надо сделать чтобы пользователь на форме мог выбрать несколько файлов (а изначально в плагине Contact Form 7 нет такой возможности), то используем плагин Multifile Upload Field for Contact Form 7. Стоит отметить, что плагин не обновлялся более 5 лет и может перестать работать с новыми версиями плагинам Contact Form 7. Но другой альтернативы я пока не знаю.
После активации данного плагина в редакторе форм появится новое поле
а при использовании этого поля на лице сайта в форме отобразится пот такая кнопка, позволяющая выбрать несколько файлов
Разрешенные к отправке типы файлов и их максимальный размер
По умолчанию в плагине разрешены к отправке следующие типы файлов:
jpg, jpeg, png, gif, pdf, doc, docx, ppt, pptx, odt, avi, ogg, m4a, mov, mp3, mp4, mpg, wav, wmv
с максимальным размером 1МБ. Об этом написано здесь.
Задать разрешенные для загрузки типы файлов и их допустимый максимальный размер можно внутри поля [file]
примерно таким образом:
[file file limit:20mb filetypes:txt|pdf|doc|docx|odt|zip ]
Прикрепляем файл к письму динамически
add_filter( 'wpcf7_mail_components', function( $components ) {
$wpcf7 = WPCF7_ContactForm::get_current();
$form_id = $wpcf7->id;
if( $form_id == 555 ) {
$file_path = 'ПОЛНЫЙ_ПУТЬ_К_ФАЙЛУ_НА_СЕРВЕРЕ';
if( mb_stripos( $components['recipient'], 'site.ru' ) === false ) {
$components['attachments'][] = $file_path;
}
}
return $components;
});
Показать код
Здесь в строке 4 надо указать верный ID формы, а в строке 5 полный путь файлу на сервере. Так же в строке 6 надо указать верный адрес сайта, вот для чего. Хук wpcf7_mail_components
срабатывает 2 раза - при отправке письма пользователю и при отправке письма админу. Админу файл отправлять не надо и в строке 6 как раз проверяется кому отправляется текущее письмо.
После отправки формы сохраняем на сервере прикрепленные к ней файлы
add_action( 'wpcf7_before_send_mail', function( $cf7 ) {
if( $cf7->id() != '55555' ) return; // выбираем нужную форму
$instance = WPCF7_Submission::get_instance();
$uploaded_files = $instance->uploaded_files();
$from = $uploaded_files['file'][0];
$file_name = time() . '-' . basename( $from );
$arr = wp_upload_dir();
$to = $arr['basedir'] . "/files/$file_name";
copy( $from, $to );
});
Показать код
В строке 2 указываем верный ID формы. После отправки формы файл будет скопирован на сервер в папку uploads/files
.