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


В настоящее время я сталкиваюсь с очень странной проблемой.

С помощью двух существующих функций 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.' ) ) );
}
Author: Faceless, 2018-06-29

1 answers

Хорошо, поэтому сейчас я чувствую себя довольно глупо, особенно потому, что я нашел решение своей собственной проблемы сразу после публикации своего вопроса здесь, но также и потому, что я нашел бы его гораздо раньше, если бы правильно отладил свою страницу (реализовал способ просмотра кодов ошибок возврата).

В любом случае...

Как указано в моем РЕДАКТИРОВАНИИ выше: мои тесты форм все еще выполнялись, несмотря на то, что я их переопределял. Я до сих пор толком не знаю, почему опубликованное решение не работает в том виде, в каком оно принято прямо из документации, но я нашел "обходной путь".

Создание массива переопределения внутри моего вызова функции на самом деле работает так, как я ожидал бы:

$movefile = wp_handle_upload( $uploadedfile, array( 'test_form' => false ) );

Извините, ребята. Счастливой отладки!

 0
Author: Faceless, 2018-06-29 11:09:05