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

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

Как настроить в 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 может быть массивом.

Тэги:

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

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

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

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

Взаимодействие форм и scripts

Взаимодействие форм и scripts

Для различных задач требуется отслеживать значения форм и полей формы. У каждого поля (input, select, checkbox, radio) есть свои особенности, которые необходимо учитывать. Поле select $('#sort').change(function(){ //функция работает при изменении Читать далее »

Заявка на товар

Заявка на товар

Бывает так, что нам не нужно непосредственно продавать товар через сайт, а только лишь получить на него заявку. Данный механизм прост: нам нужно создать форму обратной связи в которую будет Читать далее »

/

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

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

Вложение файла при отправке формы
Ускорение работы сайта WP
Рекомендации для васУскорение работы сайта WPOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.