Last active
July 17, 2019 12:11
-
-
Save pixelbart/20f6e1b68b972d18cee1dabb02dfc55f to your computer and use it in GitHub Desktop.
Einfaches WordPress Kontaktformular
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @author Kevin Pliester <me@pixelbart.de> | |
*/ | |
/** | |
* Der E-Mail-Empfänger. | |
*/ | |
$email_receivers = [ 'meine@email.de' ]; | |
/** | |
* Der Betreff. | |
*/ | |
$email_subject = esc_html__( 'Eine neue Nachricht', 'textdomain' ); | |
/** | |
* Wird für den von WordPress erstellten security-token zur Identifizierung verwendet. | |
*/ | |
$security = 'custom-contact-form'; | |
/** | |
* Prüft ob der Token korrekt ist und führt erst dann | |
* den Request bzw. das Formular aus. Wird es beim | |
* Absenden des Formulars ausgeführt. | |
*/ | |
if ( isset( $_POST['security'] ) && wp_verify_nonce( $_POST['security'], $security ) ) { | |
$form_errors = []; | |
$form_name = esc_html__( 'Keine Angabe', 'textdomain' ); | |
$form_email = ''; | |
$form_message = ''; | |
$form_success = false; | |
/** | |
* Prüft ob ein Name eingegeben wurden ist, falls nicht | |
* wird stattdessen "Keine Angabe" verwendet. | |
*/ | |
if ( isset( $_POST['form_name'] ) && '' !== $_POST['form_name'] ) { | |
$form_name = sanitize_text_field( wp_unslash( $_POST['form_name'] ) ); | |
} | |
/** | |
* Prüft ob eine E-Mail eingegeben wurden ist, falls nicht | |
* wird eine Fehlermeldung ausgeben bzw. gespeichert. | |
*/ | |
if ( ! isset( $_POST['form_email'] ) ) { | |
$form_errors[] = esc_html__( 'Es muss eine E-Mail eingegeben werden.', 'textdomain' ); | |
} elseif ( isset( $_POST['form_email'] ) && '' !== $_POST['form_email'] ) { | |
$form_email = sanitize_email( wp_unslash( $_POST['form_email'] ) ); | |
} | |
/** | |
* Prüft ob eine Nachricht eingegeben wurden ist, falls nicht | |
* wird eine Fehlermeldung ausgeben bzw. gespeichert. | |
*/ | |
if ( ! isset( $_POST['form_message'] ) ) { | |
$form_errors[] = esc_html__( 'Es muss eine Nachricht eingegeben werden.', 'textdomain' ); | |
} elseif ( isset( $_POST['form_message'] ) && '' !== $_POST['form_message'] ) { | |
$form_message = sanitize_textarea_field( wp_unslash( $_POST['form_message'] ) ); | |
} | |
if ( empty( $form_errors ) ) { | |
/* Der E-Mail Body */ | |
$email_body = sprintf( '<p>Eine neue Nachricht von %s: %s</p>', $form_name, $form_message ); | |
/** | |
* Kann alternativ zur einfachen Nachricht verwendet werden. Hier wird dann die Datei | |
* aus dem WordPress Theme im Ordner: template-parts/emails/contact.php verwendet, | |
* in der man dann sein ganzes HTML schreiben kann. Auf Variablen kann zugriffen werden, | |
* weil die Datei hier inkludiert wird. | |
* | |
* ob_start(); | |
* include_once locate_template( 'template-parts/emails/contact.php' ); | |
* $email_body = ob_get_contents(); | |
* ob_end_clean(); | |
*/ | |
/* HTML E-Mails versenden */ | |
$email_headers = [ 'Content-Type: text/html; charset=UTF-8' ]; | |
if ( wp_mail( $email_receivers, $email_subject, $email_body, $email_headers ) ) { | |
$form_success = true; | |
} else { | |
$form_errors[] = esc_html__( 'Die Nachricht konnte nicht versendet werden.', 'textdomain' ); | |
} | |
} | |
} | |
?> | |
<div class="contact-form"> | |
<?php | |
/* Gibt die Fehler aus, wenn welche existieren */ | |
if ( isset( $form_errors ) && ! empty( $form_errors ) ) { | |
foreach ( $form_errors as $form_error ) : | |
printf( '<p class="error">%s</p>', esc_html( $form_error ) ); | |
endforeach; | |
} | |
/* Gibt die Erfolgsmeldung aus, sofern der Versand erfolgreich war */ | |
if ( isset( $form_success ) && false !== $form_success ) { | |
printf( '<p class="success">%s</p>', esc_html__( 'Vielen Dank für deine Nachricht!', 'textdomain' ) ); | |
} | |
?> | |
<form action="" method="POST"> | |
<?php | |
/* Gibt ein verstecktes Feld mit dem Sicherheitstoken aus */ | |
wp_nonce_field( $security, 'security' ); | |
?> | |
<div class="form-group"> | |
<label for="form_name"><?php esc_html_e( 'Name', 'textdomain' ); ?></label> | |
<div> | |
<input type="text" name="form_name" id="form_name"> | |
</div> | |
</div><!-- .form-group --> | |
<div class="form-group"> | |
<label for="form_email"><?php esc_html_e( 'E-Mail-Adresse', 'textdomain' ); ?> <req>*</req></label> | |
<div> | |
<input type="email" name="form_email" id="form_email"> | |
</div> | |
</div><!-- .form-group --> | |
<div class="form-group"> | |
<label for="form_message"><?php esc_html_e( 'Nachricht', 'textdomain' ); ?> <req>*</req></label> | |
<div> | |
<textarea name="form_message" id="form_message"></textarea> | |
</div> | |
</div><!-- .form-group --> | |
<div class="form-submit"> | |
<button type="submit"><?php esc_html_e( 'Absenden', 'textdomain' ); ?></button> | |
</div><!-- .form-submit --> | |
</form> | |
</div><!-- .contact-form --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment