Cum să setezi adresa expeditorului conform adresei de email introduse în formular pentru wp_mail()?
Încerc să creez un formular și să-l trimit la adresa mea de email folosind wp_mail. Codul meu wp_mail() este:
if($_POST["submit"]) {
$to="emailul meu";
$subject ="Subiectul meu";
$sender=$_POST["sendername"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];
$name_title=$_POST["name_title"];
$mailBody = "<b><span style='color: red;'>Nume:</span></b> $name_title $sender\n<br/>
<b>Email:</span></b> $senderEmail\n\n<br/><br/>
<b>Mesaj:</b> $message";
$mail_sent = wp_mail( $to, $subject, $mailBody );
}
iar pentru schimbarea adresei expeditorului am adăugat următoarele filtre în functions.php
/* adăugare suport pentru emailuri html*/
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
return "text/html";
}
/* adresa expeditor */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return $senderEmail;
}
/* numele expeditorului */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return $sender;
}
iar HTML-ul formularului este:
<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">Selectează titlu</option>
<option value="Mr">Dl</option>
</div>
<div class="label-input-wrapper">
<div class="form-label">Nume</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="Trimite" name="submit">
</form>
Nu trimite formularul la emailul meu. Dar trimite formularul la emailul meu dacă schimb filtrele astfel:
/* adresa expeditor */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return "email@meu.com";
}
/* numele expeditorului */
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return "numele meu";
}
Deci cum pot face posibil să preiau emailul expeditorului în antetul from?

Dacă te înțeleg corect, ai dificultăți în a seta expeditorul (from)? Cea mai ușoară metodă ar fi să adaugi from în anteturile emailului în funcția wp_mail.
Iată un exemplu dintr-una din vechile mele funcții simple de trimitere a email-urilor care funcționează:
function contact_send() {
$title = 'Mesaj nou primit';
$headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
$message = '<h1>Mesajul meu</h1>';
// Trimite email-ul
add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
$email = wp_mail('emailul_meu@email.com', $title, $message, $headers);
remove_filter('wp_mail_content_type', 'set_html_content_type');
return $email;
}
Cârligul wp_mail_from furnizează adresa de email pe care ai setat-o deja în funcția ta wp_mail, tu nu ai setat una, așa că primea gol și returna o variabilă goală ($senderEmail nu era definită, deci returna nedefinit).

Uau... asta e grozav omule... această linie m-a salvat.. $headers = array('From: '.$_POST['sendername'].' <'.$_POST['senderEmail'].'>');
și am eliminat filtrul wp_mail_from
și wp_mail_from_name
Acum primesc exact numele expeditorului și adresa de email a expeditorului în antetul mailului..

Pentru filtrarea adresei de email:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "Numele Meu";
}
Acum adăugați un filtru pentru numele adresei de email:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "schimbati-asta-cu-adresa-dvs-de-email";
}
în fișierul vostru function.php
.

Te rog [editează] răspunsul tău și adaugă o explicație: de ce ar putea rezolva problema? Reține că OP dorea să folosească o anumită variabilă în aceste funcții.
