/ Без рубрики / Вложение файла при отправке формы

Вложение файла при отправке формы

Как настроить в WordPress вложение и отправку файла с формы без использования плагинов.

Форма с нужным полем для вложения и указанием обработчика:

<form id="individual-form" class="form-container recall-form-validate" action="<?php echo get_stylesheet_directory_uri() ?>/process_upload.php" method="post" enctype="multipart/form-data">
	<input class="form-field form-name" type="text" name="name" placeholder="Ваше имя"><br />
	<input class="form-field form-email" type="text" name="email" placeholder="E-mail"><br />
	<textarea class="form-field form-message" name="message" cols="40" rows="8" placeholder="Напишите свои пожелания" aria-required="true"></textarea>
	
	<input type="file" name="profilepicture" size="25" />
	
	<div class="submit-ajax submit-container">
		<input class="submit-button" type="submit" value="Отправить"/>
	</div>
	<small>Нажимая на кнопку, вы даете согласие на обработку <a href="/privacy-policy/" target="_blank">персональных данных</a></small>
</form>

Содержимое файла process_upload.php, на который мы переходим после отправки формы:

<?php
 
// WordPress environment
require( dirname(__FILE__) . '/../../../wp-load.php' );

if (!empty ($_FILES['profilepicture']['name']) ) {
 
	$wordpress_upload_dir = wp_upload_dir();
	// $wordpress_upload_dir['path'] is the full server path to wp-content/uploads/2017/05, for multisite works good as well
	// $wordpress_upload_dir['url'] the absolute URL to the same folder, actually we do not need it, just to show the link to file
	$i = 1; // number of tries when the file with the same name is already exists
	 
	$profilepicture = $_FILES['profilepicture'];
	$new_file_path = $wordpress_upload_dir['path'] . '/' . $profilepicture['name'];
	$new_file_mime = mime_content_type( $profilepicture['tmp_name'] );
	 
	if( empty( $profilepicture ) )
		die( 'File is not selected.' );
	 
	if( $profilepicture['error'] )
		die( $profilepicture['error'] );
	 
	if( $profilepicture['size'] > wp_max_upload_size() )
		die( 'It is too large than expected.' );
	 
	if( !in_array( $new_file_mime, get_allowed_mime_types() ) )
		die( 'WordPress doesn\'t allow this type of uploads.' );
	 
	while( file_exists( $new_file_path ) ) {
		$i++;
		$new_file_path = $wordpress_upload_dir['path'] . '/' . $i . '_' . $profilepicture['name'];
	}

}
 
// looks like everything is OK
if( move_uploaded_file( $profilepicture['tmp_name'], $new_file_path ) ) {
 
	$upload_id = wp_insert_attachment( array(
		'guid'           => $new_file_path, 
		'post_mime_type' => $new_file_mime,
		'post_title'     => preg_replace( '/\.[^.]+$/', '', $profilepicture['name'] ),
		'post_content'   => '',
		'post_status'    => 'inherit'
	), $new_file_path );
 
	// wp_generate_attachment_metadata() won't work if you do not include this file
	require_once( ABSPATH . 'wp-admin/includes/image.php' );
 
	// Generate and save the attachment metas into the database
	wp_update_attachment_metadata( $upload_id, wp_generate_attachment_metadata( $upload_id, $new_file_path ) );
 
	// Show the uploaded file in browser
	//wp_redirect( $wordpress_upload_dir['url'] . '/' . basename( $new_file_path ) );
	
}

$name = $_POST['name'];
$user_email = $_POST['email'];
$message = $_POST['message'];
$response = '';
$thm  = 'Индивидуальный проект';
$thm  = "=?utf-8?b?". base64_encode($thm) ."?=";
$msg = "Имя: ".$name."<br/>
	E-mail: ".$user_email."<br/><br/>
	Сообщение: ".$message;
$mail_to = 'info@site.ru';
$headers = "Content-Type: text/html; charset=utf-8\n";
$headers .= 'From: no-replay@site.ru' . "\r\n";

$attachments = $new_file_path;

// Отправляем почтовое сообщение
if( wp_mail($mail_to, $thm, $msg, $headers, $attachments) ) {
	$response = 'Сообщение отправлено.<br>Мы свяжемся с вами в ближайшее время.';
} else {
	$response = 'Ошибка при отправке';
}

get_header(); ?>

<main role="main">
  
	<section id="main-content"><div class="wrapper">

		<div id="content">  

			<h1><?php echo $response; ?></h1>			

		</div>  

	</div></section>

</main>

<?php get_footer(); ?>

При переходе в файл-обработчик приложенный файл загружается в медиабиблиотеку. Данный метод загрузки файла взят с сайта rudrastyh.com.

С письмом можно передавать несколько файлов, $attachments может быть массивом.

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Форма подписки без плагина

Форма подписки без плагина

Создаем простую форму подписки без какого-либо плагина. Далее возможны различные варианты применения этого функционала. Создание формы подписки // Функция формы подписки if(!function_exists('kv_email_subscription_fn')) { add_action('kv_email_subscription' , 'kv_email_subscription_fn' ); function kv_email_subscription_fn() { Читать далее »

Ajax форма без плагина

Ajax форма без плагина

Создаем формы без использования плагинов (например Contact Form 7). Делаем форму Ajax. Создание простой формы Добавляем скрипт обработчик (с валидацией полей) Прописываем функцию формы Данное решение взято с сайта inprocess.by Читать далее »

Типовые поля форм

Типовые поля форм

Для удобства и быстроты верстки привожу основные типы полей форм, а также их некоторые особенности. Input Классный эффект для любых форм на сайте. При нажатии на форму placeholder плавно исчезает. Читать далее »

Добавить комментарий

Пока нет комментариев. Будь первым!

Вложение файла при отправке формы
Подключаем КЛАДР
Рекомендации для васПодключаем КЛАДРOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.