Сохранить файл на сервер

На примере 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

Шорткод save_as_pdf