Über Web, Tech, Games, Art,
Code & Design

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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert