У меня на wordpress сайте не работает форма обратной связи. Скажу честно форму полностью скопировал у ютубера "фрилансер по жизни xD". Форма выдает 500 ошибку. Вот код:
1) js
document.addEventListener('DOMContentLoaded', function() {
const formVacancie = document.getElementById('form__vacancie');
formVacancie.addEventListener('submit', formVacancieSend);
async function formVacancieSend(e) {
e.preventDefault();
let error = formValidate(formVacancie);
let formData = new FormData(formVacancie);
formData.append('image', formFile.files[0]);
if (error === 0 ) {
formVacancie.classList.add('_sending');
let response = await fetch('/wp-content/themes/kisc/mail.php', {
method: 'POST';
body: formData
});
if(response.ok) {
let result = await response.json();
document.getElementById('about-blog-succes').style.display = 'block';
document.getElementById('vacancie-feedback').style.display = 'none';
formVacancie.reset();
} else {
alert('Ошибка');
formVacancie.classList.remove('_sending');
}
} else {
alert('Заполните обязательные поля');
}
}
function formValidate(form) {
let error = 0;
let formReq = document.querySelectorAll('._req');
for ( let index = 0; index < formReq.length; index++) {
const input = formReq[index];
formRemoveError(input);
if( input.classList.contains['_email'] ) {
if( emailTest(input) ) {
formAddError(input);
error++;
}
} else if( input.getAttribute("type") === 'checkbox' && input.checked === false) {
formAddError(input);
error++;
} else {
if (input.value === '') {
formAddError(input);
error++;
}
}
}
return error;
}
function formAddError(input) {
input.parentElement.classList.add('_error');
input.classList.add('_error');
}
function formRemoveError(input) {
input.parentElement.classList.remove('_error');
input.classList.remove('_error');
}
// функция теста email
function emailTest(input) {
return /^[\w-\.]+@[\w-]+\.[a-z]{2,4}$/i.test(input.value);
}
// добавление файла
const formFile = document.getElementById('file');
// изменения в инпуте file
formFile.addEventListener('change', () => {
uploadFile( formFile.files[0] );
});
function uploadFile(file) {
// проверка типа файла
if(!['image/jpeg', 'image/png', 'image/gif', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/pdf'].includes(file.type)) {
alert('Данное расширение файла нельзя загрузить.');
formFile.value = '';
return;
}
// проверка размера файла (<10мб)
if ( file.size > 3 *1024 *1024 ) {
alert('Файл не должен быть больше 3мб.');
return;
}
}
});
2) php
// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '/wp-content/themes/test/assets/mail/PHPMailer.php';
require '/wp-content/themes/test/assets/mail/Exception.php';
$mail = new PHPMailer(true);
$mail->CharSet = 'UTF-8';
$mail->SetLanguage('ru', 'phpmailer/language/');
$mail->IsHtml(true);
// от кого письмо
$mail->setFrom('info@test-site.test.kz', 'Вакансии test');
// Кому
$mail->addAddress('test@test.kz');
// тело письма
$mail->Subject = 'Заявка на вакансию';
$body = '<h1>Заявка на вакансию</h1>';
if(trin(!empty($_POST['name']))){
$body.='<p><strong>Имя:</strong>'.$_POST['name'].'</p>';
}
if(trin(!empty($_POST['surname']))){
$body.='<p><strong>Фамилия:</strong>'.$_POST['surname'].'</p>';
}
if(trin(!empty($_POST['email']))){
$body.='<p><strong>Почта:</strong>'.$_POST['email'].'</p>';
}
if(trin(!empty($_POST['phone']))){
$body.='<p><strong>Телефон:</strong>'.$_POST['phone'].'</p>';
}
if(trin(!empty($_POST['comment']))){
$body.='<p><strong>Комментарий:</strong>'.$_POST['comment'].'</p>';
}
// Прикрепить файл
if(!empty($_FILES['file']['tmp_name'])) {
// путь загрузки
$filePath = __DIR__ . "/wp-content/themes/test/assets/files/" . $_FILES['image']['name'];
// загрузка файла
if (copy($_FILES['file']['tmp_name'], $filePath)) {
$fileAttach = $filePath;
$body.='<p>Резюме</p>';
$mail->addAttachment($fileAttach);
}
}
$mail->Body = $body;
// отправляем
if (!$mail->send()) {
$message = 'Ошибка';
} else {
$message = 'Данные отправлены';
}
$response = ['message' => $message];
header('Content-type: application/json');
echo json_encode($response);
Я не правильно задаю путь к mail.php?
let response = await fetch('/wp-content/themes/test/mail.php', {
method: 'POST';
body: formData
});
Я просто пробовал еще и другие варианты кода, они тоже не работают. Если делаю через js то перебрасывает на страницу 404, а если убрать js и сделать action="" на mail.php то выдает 500 ошибку.