maks843: не будет так шаблон работать, WordPress не понимает, что это за шаблон. Почитайте Template Hierarchy. У вас форма принудительно уходит на mail.php и передает ей данные полей через $_POST. Именно в этом файле нужно проводить обработку формы. Или же, правильнее, для самой формы action указать пустой - тогда форма будет отправлять данные на ту же страницу, где она размещена (перезагрузка страницы по сути). Далее определите, какой шаблон эта страница использует и в нем уже добавляйте обработчик, только обязательно через проверку if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ). Кстати, у вас textarea в коде формы стоит без атрибута name, каким образом вы надеетесь эти данные получать? Также, у вас поле для Subject имеет тип type="subject" - такого не существует.
Кроме того, ряд ваших IFов лучше переписать как тернарные операторы или if/else, unset делать не нужно. Ну и сами данные $_POST еще надо валидировать и фильтровать, у вас сейчас нет никакой защиты от передачи вредоносных данных.
<div class="window-container fadeInDown animated">
<button class="close">Закрыть</button>
<h1>Напишите мне письмо</h1>
<form action="" method="post">
<input class="first" type="text" name="name" placeholder="Имя" required><br>
<input class="first" type="email" name="email" placeholder="Email" required><br>
<input class="first" type="text" name="subject" placeholder="Тема"><br>
<textarea class="input textarea" name="message" placeholder="Сообщение" required></textarea><br>
<input type="submit" class="button" value="Отправить">
</form>
</div>
if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ) {
$name = sanitize_text_field( $_POST['name'] );
$email = sanitize_email( $_POST['email'] );
$subject = ( !empty($_POST['subject']) ) ? sanitize_text_field( $_POST['subject'] ) : 'Default subject';
$message = sanitize_text_field( $_POST['message'] );
$to = 'your@email.com';
$headers = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
$send = wp_mail( $to, $subject, $message, $headers ); // returns true/false
echo ( true == $send ) ? 'Success message' : 'Error message';
}
Проверку, заполнены ли все обязательные поля, надо делать javascript'ом, плюс у вас есть атрибут required, тут уже браузер убедится, что поля заполнены. Также, не мешало бы валидировать формат email еще до отправки данных на сервер (или использовать HTML5 тип input type="email").
В общем, если честно, я не совсем понимаю, зачем вы пытаетесь вручную делать то, в чем пока еще смутно разбираетесь, вместо того, чтобы использовать один из сотни плагинов для форм обратной связи, которые уже учитывают безопасность, валидацию данных, обработку черех Ajax и тд. Если же все-таки хотите освоить эту сферу - начните последовательно изучать то, как правильно нужно работать с формами. Уроков в сети масса.