30. Juni 2024
PHP-Mail-Formulare mit wp_mail() versenden
Um Formulare in WordPress zu erstellen gibt es ja einige Plug-ins, die den Aufbau und Versand um einiges erleichtern. In manchen Fällen sind Custom-PHP-Formulare jedoch unumgänglich. Eine gute Alternative zu PHP-Mail und dem PHP-Mailer, ist die WordPress-Funktion „wp_maiI()“.
Mit folgendem Code kann „wp_mail“ auch „außerhalb“ einer WordPress-Seite genutzt werden. Hierfür ist es lediglich erforderlich „wp-load.php“ einzubinden.
<?php
if ($_POST){
require_once('/home/wp/disk/wordpress/wp-load.php');
$email_body = "<html><body>";
$email_body .= "<h2>Neue Anfrage erhalten:</h2>";
$email_body .= "<table border='1' cellpadding='5' cellspacing='0'>";
foreach ($post_data as $key => $value) {
$email_body .= "<tr>";
$email_body .= "<td><strong>" . htmlspecialchars($key) . "</strong></td>";
$email_body .= "<td>" . htmlspecialchars($value) . "</td>";
$email_body .= "</tr>";
}
$email_body .= "</table>";
$email_body .= "</body></html>";
$to = 'somebody@example.com';
$subject = 'Neue Anfrage';
$headers = array('Content-Type: text/html; charset=UTF-8');
if (wp_mail($to, $subject, $email_body, $headers)) {
echo 'E-Mail erfolgreich gesendet.';
} else {
echo 'Fehler beim Senden der E-Mail.';
}
} else {
echo 'Keine Daten empfangen.';
}
?>
Code-Sprache: HTML, XML (xml)
Absenderadresse und -name können in der functions.php mit folgendem Code angepasst werden.
add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
return 'form@example.com';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
return 'Webform';
}
Code-Sprache: PHP (php)
Clientseitig ist es sehr komfortabel alle Formular-Eingaben mit der jQuery-Funktion „serialize()“ zusammenzufassen:
var form = $('#form');
form.submit(function(event) {
event.preventDefault();
var form_data = new FormData();
form_data.append('post_data', form.serialize());
form_data.append('verification', '9283hf829ws');
$.ajax({
url: 'handledata.php',
type: 'POST',
contentType: false,
processData: false,
data: form_data,
beforeSend: function(xhr) {
$('.send-form').text('wird gesendet...');
}
})
.done(function() {
$('.send-form').prop('disabled', true).text('erfolgreich gesendet');
$('input').attr('readonly', true);
$('.send-form').hide();
$('#success').fadeIn(250);
$('#form').css('opacity', 0.3);
});
});
Code-Sprache: JavaScript (javascript)