Как установить адрес отправителя в соответствии с email-адресом из формы для wp_mail()?
Я пытаюсь создать форму и отправить её на свой email-адрес, используя wp_mail. Мой код wp_mail() выглядит так:
if($_POST["submit"]) {
$to="мой email";
$subject ="Моя тема";
$sender=$_POST["sendername"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];
$name_title=$_POST["name_title"];
$mailBody = "<b><span style='color: red;'>Имя:</span></b> $name_title $sender\n<br/>
<b>Email:</span></b> $senderEmail\n\n<br/><br/>
<b>Сообщение:</b> $message";
$mail_sent = wp_mail( $to, $subject, $mailBody );
}
А для изменения адреса отправителя я добавил следующие фильтры в файл functions.php
/* добавление поддержки html писем */
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
return "text/html";
}
/* адрес отправителя */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return $senderEmail;
}
/* имя отправителя */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return $sender;
}
А HTML формы выглядит так:
<form id="" name="" action="<?php echo get_permalink(); ?>" method="post">
<div class="form-input">
<select name="name_title" class="name-title-input">
<option value="" selected="selected">Выберите обращение</option>
<option value="Mr">Господин</option>
</div>
<div class="label-input-wrapper">
<div class="form-label">Имя</div><div class="form-input"><input type="text" name="sendername"/></div>
</div>
<div class="label-input-wrapper">
<div class="form-label">E-Mail</div><div class="form-input"><input type="email" name="senderEmail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required /></div>
</div>
<input type="submit" value="Отправить" name="submit">
</form>
Форма не отправляет письмо на мой email. Но она отправляет форму на мой email, если я изменяю фильтры следующим образом:
/* адрес отправителя */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return "my@email.com";
}
/* имя отправителя */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return "мое имя";
}
Как можно сделать так, чтобы в заголовке отправителя использовался email отправителя из формы?

Если я правильно вас понял, у вас возникают трудности с установкой поля from (отправитель)? Самый простой способ — просто добавить from в заголовки email в функции wp_mail.
Вот пример одной из моих старых простых функций отправки email, которая работает:
function contact_send() {
$title = 'Новое полученное сообщение';
$headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
$message = '<h1>Мое сообщение</h1>';
// Отправляем email
add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
$email = wp_mail('my_email@email.com', $title, $message, $headers);
remove_filter('wp_mail_content_type', 'set_html_content_type');
return $email;
}
Хук wp_mail_from предоставляет email, который вы уже установили в вашей функции wp_mail. Если вы его не установили, то получали пустое значение и возвращалась пустая переменная (так как $senderEmail не был определен, возвращалось "undefined").

Ух ты... это отлично, чувак.. эта строка меня спасла.. $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');
и я убрал фильтры wp_mail_from
и wp_mail_from_name
Теперь я получаю точное имя отправителя и его email в заголовке письма..

Для фильтрации адреса электронной почты:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "Мое Имя";
}
Теперь добавьте фильтр для имени адреса электронной почты:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "change-this-to-your-email-address";
}
в ваш файл function.php
.

Пожалуйста, [отредактируйте] ваш ответ и добавьте объяснение: почему это может решить проблему? Обратите внимание, что автор хотел использовать конкретную переменную в этих функциях.
