¿Cómo establecer la dirección del remitente según el email ingresado en el formulario para wp_mail()?
Estoy tratando de crear un formulario y enviarlo a mi dirección de correo usando wp_mail. Mi código de wp_mail() es:
if($_POST["submit"]) {
$to="mi email";
$subject ="Mi asunto";
$sender=$_POST["sendername"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];
$name_title=$_POST["name_title"];
$mailBody = "<b><span style='color: red;'>Nombre:</span></b> $name_title $sender\n<br/>
<b>Email:</span></b> $senderEmail\n\n<br/><br/>
<b>Mensaje:</b> $message";
$mail_sent = wp_mail( $to, $subject, $mailBody );
}
y para cambiar la dirección del remitente he añadido los siguientes filtros en mi functions.php
/* añadiendo soporte para emails html*/
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
return "text/html";
}
/* dirección del remitente */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return $senderEmail;
}
/* nombre del remitente */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return $sender;
}
y el HTML del formulario es:
<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">Seleccionar Título</option>
<option value="Mr">Sr</option>
</div>
<div class="label-input-wrapper">
<div class="form-label">Nombre</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="Enviar" name="submit">
</form>
No está enviando el formulario a mi email. Pero sí envía el formulario a mi email si cambio los filtros de la siguiente manera:
/* dirección del remitente */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return "mi@email.com";
}
/* nombre del remitente */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return "mi nombre";
}
Entonces, ¿cómo puedo hacer posible obtener el email del remitente en el encabezado from?

Si te entiendo correctamente, estás teniendo problemas para configurar el remitente (from). La forma más fácil sería simplemente agregando el from en los encabezados del correo en la función wp_mail.
Aquí tienes un ejemplo de una de mis antiguas funciones simples para enviar correos que funciona:
function contact_send() {
$title = 'Nuevo mensaje recibido';
$headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
$message = '<h1>Mi mensaje</h1>';
// Enviar el correo
add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
$email = wp_mail('mi_correo@email.com', $title, $message, $headers);
remove_filter('wp_mail_content_type', 'set_html_content_type');
return $email;
}
El hook wp_mail_from proporciona el correo que ya has configurado en tu función wp_mail, no has configurado uno por lo que estaba recibiendo vacío y devolviendo una variable vacía ($senderEmail no estaba definido por lo que retornaría undefined).

Wow... eso es genial hombre... esta línea me salvó.. $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');
y eliminé los filtros wp_mail_from
y wp_mail_from_name
Ahora obtengo exactamente el nombre del remitente y su correo electrónico en el encabezado del correo..

Para filtrar la dirección de correo electrónico:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "Mi Nombre";
}
Ahora añade un filtro para el nombre de la dirección de correo:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "cambia-esto-por-tu-direccion-de-correo";
}
en tu archivo function.php
.

Por favor, [edita] tu respuesta y agrega una explicación: ¿por qué eso podría resolver el problema? Ten en cuenta que el OP quería usar una variable específica en estas funciones.
