Вложение электронной почты из формы Отправки
В настоящее время я сталкиваюсь с очень странной проблемой.
С помощью двух существующих функций wordpress (wp_handle_upload и wp_mail) и формы, которая использует некоторые пользовательские функции ajax для обработки моих данных, я пытаюсь отправить эти данные на свой адрес электронной почты. Это включает в себя несколько текстовых вводов и файл.
Большая часть моих усилий, похоже, идет нормально (данные отправляются из моей формы, они получены в моем php-файле и т. Д.), Однако wp_handle_upload никогда возвращает что-либо при вводе моих данных $_files. Отладка подтвердила мое предположение, так как мой файл правильно отправляется/прикрепляется к моей почте всякий раз, когда я использую свои данные $_files напрямую (без предварительной отправки их в wp_handle_upload).
Проблема здесь, конечно, в том, что я буду жонглировать временными данными отправки, а также никогда не получу файл в его правильном состоянии (например: его имя является временным, которое не включает окончание файла и т. Д.). Так что это, очевидно, не решение моей проблемы. проблема, однако, предоставляет мне информацию о том, что что-то идет не так, когда я использую wp_handle_upload.
Я предполагаю, что в этой функции может быть какая-то проверка безопасности, которую мои данные формы не проходят, поэтому она всегда будет возвращать значение NULL. С текущей реализацией я всегда буду получать почту без каких-либо вложений.
Я просмотрел множество уже опубликованных вопросов и соответствующим образом адаптировал свое решение, но, к сожалению, безрезультатно. Большое вам спасибо в продвигайтесь вперед и хорошего вам дня.
Приведенный ниже код был немного адаптирован (изменены имена, удалены операторы if и т.д.), Чтобы не слишком загромождать мой пост. Однако все должно быть по-прежнему функциональным.
Файл JS (включен при загрузке страницы):
jQuery(function($){
$(document).ready(function(){
register.init();
});
var register= {
init : function(){
this.createEvents();
},
createEvents : function(){
var t = this;
$( "form" ).submit(function() {
t.submitForm($(this));
});
},
submitForm: function(clicked){
var data = new FormData();
data.append('action', 'register_form');
data.append('firstname', $('#firstname').val());
data.append('lastname', $('#lastname').val());
data.append('email', $('#email').val());
data.append('attachmentFile', $('#attachmentFile')[0].files[0] );
jQuery.ajax({
url : registerFormAjax.ajaxurl,
type: 'POST',
data : data,
cache: false,
processData: false,
contentType: false
});
}
};
});
PHP-файл (пользовательский плагин):
add_action( 'wp_ajax_register_form', 'register_form' );
add_action( 'wp_ajax_nopriv_register_form', 'register_form' );
function register_form()
{
$kv_errors= array();
if('POST' == $_SERVER['REQUEST_METHOD']) {
$fields = array('firstname', 'lastname', 'email');
foreach ($fields as $field) {
if (isset($_POST[$field])) $posted[$field] =
stripslashes(trim($_POST[$field])); else $posted[$field] = '';
}
if ( ! function_exists( 'wp_handle_upload' ) ) {
require_once( ABSPATH . 'wp-admin/includes/file.php' );
}
if(isset($_FILES['attachmentFile']))
{
$uploadedfile = $_FILES['attachmentFile'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
$attachment = $movefile['file'];
$headers = 'From: '.$posted['firstname']. ' ' . $posted['lastname'].' <'.$posted['email'].'>' . "\r\n";
wp_mail('[email protected]', 'Subject' , "Test", $headers, $attachment);
unlink( $movefile['file'] );
}
}
wp_die();
}
РЕДАКТИРОВАТЬ:
Хорошо. Кажется, я нашел свою настоящую проблему. Мы надеемся, что решение скоро последует. По какой-то причине мои переопределения не будут работать должным образом. Это означает даже деактивацию формы проверяет вот так
$upload_overrides = array( 'test_form' => false );
Не пропустит следующий тест, выполненный в функции wordpress (wp_handle_upload)
// A correct form post will pass this test.
if ( $test_form && ( ! isset( $_POST['action'] ) || ( $_POST['action'] != $action ) ) ) {
return call_user_func_array( $upload_error_handler, array( &$file, __( 'Invalid form submission.' ) ) );
}
1 answers
Хорошо, поэтому сейчас я чувствую себя довольно глупо, особенно потому, что я нашел решение своей собственной проблемы сразу после публикации своего вопроса здесь, но также и потому, что я нашел бы его гораздо раньше, если бы правильно отладил свою страницу (реализовал способ просмотра кодов ошибок возврата).
В любом случае...
Как указано в моем РЕДАКТИРОВАНИИ выше: мои тесты форм все еще выполнялись, несмотря на то, что я их переопределял. Я до сих пор толком не знаю, почему опубликованное решение не работает в том виде, в каком оно принято прямо из документации, но я нашел "обходной путь".
Создание массива переопределения внутри моего вызова функции на самом деле работает так, как я ожидал бы:
$movefile = wp_handle_upload( $uploadedfile, array( 'test_form' => false ) );
Извините, ребята. Счастливой отладки!