Come impostare l'indirizzo del mittente in base all'email inserita nel form per wp_mail()?
Sto cercando di creare un form e inviarlo al mio indirizzo email usando wp_mail. Il mio codice wp_mail() è:
if($_POST["submit"]) {
$to="mia email";
$subject ="Il mio oggetto";
$sender=$_POST["sendername"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];
$name_title=$_POST["name_title"];
$mailBody = "<b><span style='color: red;'>Nome:</span></b> $name_title $sender\n<br/>
<b>Email:</span></b> $senderEmail\n\n<br/><br/>
<b>Messaggio:</b> $message";
$mail_sent = wp_mail( $to, $subject, $mailBody );
}
e per cambiare l'indirizzo del mittente ho aggiunto i seguenti filtri nel mio functions.php
/* aggiunta del supporto per email HTML */
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
return "text/html";
}
/* indirizzo mittente */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return $senderEmail;
}
/* nome mittente */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return $sender;
}
e l'HTML del form è:
<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">Seleziona Titolo</option>
<option value="Sig">Sig</option>
</div>
<div class="label-input-wrapper">
<div class="form-label">Nome</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="Invia" name="submit">
</form>
Non invia l'email al mio indirizzo. Ma invia il form alla mia email se cambio i filtri nel seguente modo:
/* indirizzo mittente */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return "mia@email.com";
}
/* nome mittente */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return "mio nome";
}
Quindi come posso fare per ottenere l'email del mittente nell'intestazione from?

Se ho capito bene, stai avendo difficoltà a impostare il mittente? Il modo più semplice sarebbe aggiungere il campo from negli intestazioni dell'email nella funzione wp_mail.
Ecco un esempio di una mia vecchia funzione semplice per l'invio di email che funziona:
function contact_send() {
$title = 'Nuovo messaggio ricevuto';
$headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
$message = '<h1>Il mio messaggio</h1>';
//Invia l'email
add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
$email = wp_mail('mia_email@email.com', $title, $message, $headers);
remove_filter('wp_mail_content_type', 'set_html_content_type');
return $email;
}
L'hook wp_mail_from fornisce l'email che hai già impostato nella tua funzione wp_mail, non ne hai impostata una quindi riceveva vuoto e restituiva una variabile vuota ($senderEmail non era definita quindi restituiva undefined).

Woooh... fantastico amico... questa riga mi ha salvato.. $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');
e ho rimosso i filtri wp_mail_from
e wp_mail_from_name
Ora ottengo esattamente il nome del mittente e la sua email nell'intestazione della mail..

Per filtrare l'indirizzo email:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "Il Mio Nome";
}
Ora aggiungi un filtro per il nome dell'indirizzo email:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "cambia-con-il-tuo-indirizzo-email";
}
nel tuo file function.php
.

Per favore [modifica] la tua risposta, e aggiungi una spiegazione: perché potrebbe risolvere il problema? Nota che l'OP voleva usare una specifica variabile in queste funzioni.
