На примере PDF файла.
Создание файла на клиентской стороне
<div id="dataForSaving">Long, long ago ...</div>
<div class="save-button" onclick="saveToPdf()">Сохранить в PDF</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.12.1/html2pdf.bundle.min.js"></script>
<script>
function saveToPdf() {
const element = document.getElementById("dataForSaving");
html2pdf().from(element)
.set({
margin: 10,
filename: 'my_document.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
})
.output('blob')
.then(function(pdfBlob) {
var m_data = new FormData();
m_data.append('action', 'pdf');
m_data.append('my_pdf', pdfBlob, 'document.pdf');
jQuery.ajax({
type: "POST",
url: '<?php echo admin_url( "admin-ajax.php" ) ?>',
data: m_data,
contentType: false,
processData: false,
success: function (data) {
location.href = data;
},
});
}).catch(error => {
console.error("Promise rejected:", error);
});;
}
</script>
Сохранение файла
add_action( 'wp_ajax_pdf', 'save_pdf' );
add_action( 'wp_ajax_nopriv_pdf', 'save_pdf' );
function save_pdf() {
$formData = $_POST[ 'pdfBlob' ];
if (isset($_FILES['my_pdf'])) {
$uploaded_file = $_FILES['my_pdf'];
$upload_dir = (object) wp_upload_dir();
$time = time();
move_uploaded_file($uploaded_file['tmp_name'], $upload_dir->basedir . '/' . $time . $uploaded_file['name']);
echo $upload_dir->baseurl . '/' . $time . $uploaded_file['name'];
}
die;
}
Этот код в виде плагина
Шорткод save_as_pdf
