我现在遇到了一个非常奇怪的问题。
借助现有的两个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(\'[email protected]\', \'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.\' ) ) );
}