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

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

Как настроить в 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 Читать далее »

Contact Form 7

Contact Form 7

Contact Form 7 — очень нужный плагин для модулирования различных форм обратной связи. Имеет множество дополнений. Плагин Contact Form 7 Код вставки формы Отключить обертку в <p> и добавление <br> Читать далее »

/

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

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

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