我现在遇到了一个非常奇怪的问题。
借助现有的两个wordpress函数(wp\\u handle\\u upload和wp\\u mail)和一个使用一些自定义ajax功能来处理我的数据的表单,我正在尝试将数据发送到我的电子邮件地址。这包括一些文本输入和一个文件。
我的大部分努力似乎都很顺利(数据是从我的表单发送的,它是在我的php文件中接收的等),但是wp\\U handle\\U upload在收到我的$\\U文件数据时从不返回任何东西。调试支持我的假设,因为每当我直接使用我的$\\u文件数据时,我的文件都会正确发送/附加到我的邮件中(无需先将其馈送给wp\\u handle\\u upload)。
当然,这里的问题是,我将处理临时提交数据,并且永远不会收到处于正确状态的文件(例如:其名称是临时名称,不包括其文件结尾等)。因此,这显然不是我问题的解决方案,但是,无论何时使用wp\\u handle\\u 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(\'test@test.com\', \'Subject\' , "Test", $headers, $attachment);
            unlink( $movefile[\'file\'] );
        }
    }
wp_die();
}
 编辑:
好吧我似乎已经找到了我真正的问题。希望很快就能找到解决方案。由于某些原因,我的覆盖无法正常工作。这意味着甚至可以像这样停用表单检查
$upload_overrides = array( \'test_form\' => false );
 不会跳过在wordpress功能中完成的以下测试(wp\\u handle\\u 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.\' ) ) );
}