管理者がワードプレスバックエンドでそれをアップロードした後、私はXMLファイルを処理する必要があります。
1)フォームを作成しました:
function x_show_settings_page(){
?>
<form method="post">
<table class="form-table">
<tr valign="top">
<th scope="row">XML-Datei hochladen</th>
<td><input type="file" name="thirdcolor" id="xmlfile" value="" /></td>
</tr>
</table>
<?php submit_button('Hochladen'); ?>
</form>
<?php
}
2)私は自分の関数にajax経由でフォームを送信します。
add_action( 'admin_footer', 'x_add_settings_js' );
function x_add_settings_js() { ?>
<script type="text/javascript" >
jQuery(document).ready(function($) {
var file_data = jQuery('#xmlfile').val();
var form_data = new FormData();
form_data.append('xmlfile', file_data);
form_data.append('action', 'calculate_xml');
$.ajax({
url : ajaxurl,
type: "POST",
data : form_data,
processData: false,
contentType: false,
success:function(response){
alert('ok' + response);
},
error: function(response){
alert('no' + response);
}
});
});
</script> <?php
}
3)内容を出力したい
add_action( 'wp_ajax_calculate_xml', 'calculate_xml' );
function calculate_xml() {
$xmlfile = $_POST['xmlfile'];
print_r(simplexml_load_file($xmlfile));
wp_die();
}
しかしうまくいかないようです。私のテスト文字列 'ok'を除いて、私の応答は何も返しません。
私はたくさんのことを試すことで問題を解決しました。どうやら私のFormDataオブジェクトが正しくありませんでした。私のコードにこれらの変更を加えることはうまくいきました:
$('#xml').on('submit', function(e) {
e.preventDefault();
var form_data = new FormData(this);
form_data.append('action', 'calculate_xml');
$.ajax({
url : ajaxurl,
type: "POST",
data : form_data,
processData: false,
cache: false,
contentType: false,
success:function(response){
$('#response').html(response);
},
error: function(response){
$('#response').text('error');
}
});
});