wp_mail nu trimite email-uri
Am folosit WP-Mail-SMTP
pentru a configura sistemul de trimitere email pe instalarea mea de WordPress. Am testat funcționalitatea trimițând email către adresa mea personală.
Acum încerc să trimit datele din formular folosind funcția wp_mail()[WP].
Mai jos este codul.
<?php
if(isset($_POST["button_pressed"])){
// Verifică dacă câmpurile sunt goale
if($_POST["dname"]==""){
echo "Completează toate câmpurile..";
}
else {
$email=$_POST['email'];
$message = $_POST['dname'];
$headers = 'From:' . "\r\n"; // Email-ul expeditorului
$headers .= 'Cc:' . "\r\n"; // Copie carbon către expeditor
// Liniile mesajului nu trebuie să depășească 70 de caractere (regulă PHP), așa că aplică wordwrap
// $message = wordwrap($message, 70);
wp_mail("ADRESA-EMAIL-PRIVATA", $subject, $message, $headers)
echo "Email-ul tău a fost trimis cu succes! Mulțumim pentru feedback.";
}
?>
Formular HTML
<form>
<div class="row">
<div class="form-group">
<div class="col-sm-6"><input class="form-control" type="text" placeholder="INTRODU NUMELE CÂINELUI" id="dname" /></div>
<div class="col-sm-6"><input class="form-control" type="text" placeholder="INTRODU NUMELE PROPRIETARULUI" id="name" /></div>
</div>
</div>
<input type="submit" value="TRIMITE" />
<input type="hidden" name="button_pressed" value="1" />
</form>
Am încercat multe tutoriale, dar niciunul nu a ajutat. Comentariile și sugestiile voastre îmi vor fi de mare ajutor. Vă mulțumesc pentru timpul acordat.
După ce am stat ore întregi să mă joc cu codul, am găsit problema.
Era la formular, nu la PHP.
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE CÂINELUI" id="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE PROPRIETARULUI" id="name" /></div>
Atributul id
trebuie schimbat în name
.
Corectat
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE CÂINELUI" name="dname" /></div>
<div class="col-sm-6">
<input class="form-control" type="text" placeholder="INTRODUCEȚI NUMELE PROPRIETARULUI" name="name" /></div>
</div>

YIKESSSSSS. Sunt multe lucruri greșite.
Trebuie să sanitizezi datele din $_POST sau se vor întâmpla lucruri foarte, foarte rele...
Este mai bine să folosești ghilimele simple pentru șirurile de caractere în WordPress
Spațierea și indentarea nu urmează cele mai bune practici.
Nu faci nimic cu $_POST['name'] ???
Faci referire la $_POST["email"], dar nu îl transmiți prin formularul exemplu, ceea ce va rezulta în erori de variabilă nedefinită (FOLOSEȘTE WP DEBUG !!! SETEAZĂ-L PE TRUE)
Este important să verifici toate valorile din $_POST, nu doar una, deoarece cineva poate manipula formularul sau un spammer poate trimite email fără ca formularul să aibă o valoare POST, cauzând din nou erori de variabilă nedefinită.
wp_mail ar trebui să aibă punct și virgulă la sfârșit
Îți lipsește o acoladă de închidere, PHP nu ar funcționa niciodată.
Else nu este necesar
Este mai bine să folosești wp_die dacă există manipulare a formularului. Dacă nu dorești o experiență proastă pentru utilizatori, folosește pur și simplu atributul HTML required în câmpurile de input.
Nu este nevoie de div-uri de închidere după câmpurile de input
Este mai bine să folosești CSS și Bootstrap nativ pentru a gestiona literele majuscule.
php
<?php
if ( isset( $_POST["button_pressed"] ) ) {
// Verificare pentru câmpuri goale..
if ( empty( $_POST['dname'] ) || empty( $_POST['name'] ) ) {
wp_die( __( 'Te rog completează toate câmpurile data viitoare.', 'your-text-domain' ) );
}
$message = sanitize_text_field( $_POST['dname'] );
// $email = sanitize_email( $_POST["email"] );
$name = sanitize_text_field( $_POST['name'] );
$headers = 'From:' . "\r\n"; // Emailul expeditorului
$headers .= 'Cc:' . "\r\n"; // Copie carbon către expeditor
// Trimite email
wp_mail( 'PRIVATE-EMAIL-ADDRESS', $subject, $message, $headers );
// Afișează mesajul și ascunde formularul
_e( 'Emailul tău a fost trimis cu succes! Îți mulțumim pentru feedback.', 'your-text-domain' );
echo '<style>#contact-form{ display: none; }</style>';
}
?>
și markup-ul html
<form action="" id="contact-form" method="post">
<div class="row">
<div class="form-group">
<div class="col-sm-6">
<input class="form-control text-uppercase" type="text" placeholder="<?php _e( 'Introdu numele câinelui', 'your-text-domain' ); ?>" name="dname" required>
<div class="col-sm-6">
<input class="form-control text-uppercase" type="text" placeholder="<?php _e( 'Introdu numele proprietarului', 'your-text-domain' ); ?>" name="name" required>
</div>
</div>
</div>
<input type="submit" value="TRIMITE" />
<input type="hidden" name="button_pressed" value="1" />
</form>

Am verificat codul tău. Cred că antetul nu este definit corect. Te rog verifică codul de mai jos:
$current_user = wp_get_current_user();
$name = sanitize_text_field($_POST["name"]);
$email_address = sanitize_email($_POST["email_address"]);
$detail = esc_textarea($_POST["detail"]);
$message = "Nume : " . $name . "\n";
$message .= "Adresă email : " . $email_address . "\n";
$message .= "Detalii : " . $detail . "\n";
$send_to = 'test@test.com';
$headers = 'De la: ' . $current_user->user_firstname . ' ' . $current_user->user_lastname . ' <test@test.com>' . "\r\n";
if (wp_mail($send_to, $email_subject, $message, $headers)) {
wp_redirect(admin_url('admin.php?page=contact-page&msg=success'));
exit();
} else {
wp_redirect(admin_url('admin.php?page=contact-page&msg=failed'));
exit();
}
