Skip to content

Instantly share code, notes, and snippets.

@pixelbart
Last active July 17, 2019 12:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pixelbart/20f6e1b68b972d18cee1dabb02dfc55f to your computer and use it in GitHub Desktop.
Save pixelbart/20f6e1b68b972d18cee1dabb02dfc55f to your computer and use it in GitHub Desktop.
Einfaches WordPress Kontaktformular
<?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