<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.sehanka.de/index.php?action=history&amp;feed=atom&amp;title=Eigenes_WordPress_Formular_mit_Datenbankanbindung_integrieren_%28HowTo%29</id>
	<title>Eigenes WordPress Formular mit Datenbankanbindung integrieren (HowTo) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sehanka.de/index.php?action=history&amp;feed=atom&amp;title=Eigenes_WordPress_Formular_mit_Datenbankanbindung_integrieren_%28HowTo%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.sehanka.de/index.php?title=Eigenes_WordPress_Formular_mit_Datenbankanbindung_integrieren_(HowTo)&amp;action=history"/>
	<updated>2026-06-13T22:48:15Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in wiki.sehanka.de</subtitle>
	<generator>MediaWiki 1.36.0</generator>
	<entry>
		<id>https://wiki.sehanka.de/index.php?title=Eigenes_WordPress_Formular_mit_Datenbankanbindung_integrieren_(HowTo)&amp;diff=76&amp;oldid=prev</id>
		<title>Sebastian.kalms: Die Seite wurde neu angelegt: „= Allgemeines =  TBD  = Arbeitsschritte =  == Schritt 1: HTML form integrieren ==  * Struktur (HTML) des Formulars durch HTML-Attribut form erstellen * HTML-Fo…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.sehanka.de/index.php?title=Eigenes_WordPress_Formular_mit_Datenbankanbindung_integrieren_(HowTo)&amp;diff=76&amp;oldid=prev"/>
		<updated>2021-06-30T07:37:45Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Allgemeines =  TBD  = Arbeitsschritte =  == Schritt 1: HTML form integrieren ==  * Struktur (HTML) des Formulars durch HTML-Attribut form erstellen * HTML-Fo…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Allgemeines =&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
= Arbeitsschritte =&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: HTML form integrieren ==&lt;br /&gt;
&lt;br /&gt;
* Struktur (HTML) des Formulars durch HTML-Attribut form erstellen&lt;br /&gt;
* HTML-Formular integrieren in ...&lt;br /&gt;
** Template --&amp;gt; folgenden Code in z.B. in single-xyz.php o.Ä. integrieren&lt;br /&gt;
** Shortcode --&amp;gt; folgenden Code in child_theme/partials/participation.php integrieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form name=&amp;quot;contact-form&amp;quot; class=&amp;quot;contact&amp;quot; action=&amp;quot;&amp;lt;?php echo get_site_url(); ?&amp;gt;/wp-json/wp/v2/submit-contact-request&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_anrede&amp;quot;&amp;gt;Anrede&amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;anrede&amp;quot; id=&amp;quot;input_anrede&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;bitte wählen&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;Herr&amp;quot;&amp;gt;Herr&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;Frau&amp;quot;&amp;gt;Frau&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option value=&amp;quot;&amp;quot;&amp;gt;keine Angabe&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_vorname&amp;quot;&amp;gt;Vorname*&amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;vorname&amp;quot; id=&amp;quot;input_vorname&amp;quot; required placeholder=&amp;quot;Vorname&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_nachname&amp;quot;&amp;gt;Nachname*&amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nachname&amp;quot; id=&amp;quot;input_nachname&amp;quot; required placeholder=&amp;quot;Nachname&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_geburtstag_tag&amp;quot;&amp;gt;Geburtstag&amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;geburtstag_tag&amp;quot; id=&amp;quot;input_geburtstag_tag&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
            for($i = 1; $i &amp;lt;= 31; $i++) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;option&amp;gt;$i&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;geburtstag_monat&amp;quot; id=&amp;quot;input_geburtstag_monat&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Januar&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Februar&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;März&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;April&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Mai&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Juni&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Juli&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;August&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;September&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Oktober&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;November&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;Dezember&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
        &amp;lt;select name=&amp;quot;geburtstag_jahr&amp;quot; id=&amp;quot;input_geburtstag_jahr&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;option&amp;gt;&amp;lt;/option&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
            for($i = 2020; $i &amp;gt;= 1920; $i--) {&lt;br /&gt;
                echo &amp;quot;&amp;lt;option&amp;gt;$i&amp;lt;/option&amp;gt;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/select&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_email&amp;quot;&amp;gt;E-Mail-Adresse*&amp;lt;/label&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;email&amp;quot; name=&amp;quot;email&amp;quot; id=&amp;quot;input_email&amp;quot; required placeholder=&amp;quot;E-Mail-Adresse&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;newsletter&amp;quot; id=&amp;quot;input_newsletter&amp;quot; value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_newsletter&amp;quot;&amp;gt;&lt;br /&gt;
            Newsletter&lt;br /&gt;
        &amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;teilnahmebedingungen&amp;quot; id=&amp;quot;input_teilnahmebedingungen&amp;quot; required value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_teilnahmebedingungen&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;https://www.banana-bites.de/teilnahmebedingungen/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Teilnahmebedingungen*&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;datenschutzbestimmungen&amp;quot; id=&amp;quot;input_datenschutzbestimmungen&amp;quot; required value=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;label for=&amp;quot;input_datenschutzbestimmungen&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;a href=&amp;quot;https://www.banana-bites.de/datenschutzerklaerung/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;Datenschutzbestimmungen*&amp;lt;/a&amp;gt;&lt;br /&gt;
        &amp;lt;/label&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;wp-block-button&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Absenden&amp;quot; class=&amp;quot;wp-block-button__link&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: HTML form durch CSS bzw. SCSS gestalten ==&lt;br /&gt;
&lt;br /&gt;
* neue Datei anlegen, z.B. innerhalb von Sass-7-1-Muster (https://sass-guidelin.es/de/#das-7-1-muster) in child_theme/style/layout/forms.scss&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
form .input-wrapper {&lt;br /&gt;
  margin: 15px 0 30px 0;&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form .input-wrapper:first-child {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form .input-wrapper:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form .input-wrapper.small {&lt;br /&gt;
  font-size: 80%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
label {&lt;br /&gt;
  color: $main-grey;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form input, form textarea {&lt;br /&gt;
  border: #cccccc 1px solid;&lt;br /&gt;
  background: #f9f9f9;&lt;br /&gt;
  margin: 10px 0 0 0;&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 17px;&lt;br /&gt;
  color: #818181;&lt;br /&gt;
  display: block;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form input[type=&amp;quot;checkbox&amp;quot;], form input[type=&amp;quot;radio&amp;quot;], form input[type=&amp;quot;submit&amp;quot;], form input[type=&amp;quot;reset&amp;quot;] {&lt;br /&gt;
  width: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  display: initial;&lt;br /&gt;
  margin-top: 10px;&lt;br /&gt;
  margin-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form input[type=&amp;quot;checkbox&amp;quot;] + label::before {&lt;br /&gt;
  width: 18px;&lt;br /&gt;
  height: 18px;&lt;br /&gt;
  background-color: #f9f9f9;&lt;br /&gt;
  display: block;&lt;br /&gt;
  content: &amp;quot;x&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 17px;&lt;br /&gt;
  color: #e5e5e5;&lt;br /&gt;
  margin-top: -18px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
form input[type=&amp;quot;checkbox&amp;quot;]:checked + label::before {&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.contact-success-message {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
select {&lt;br /&gt;
  margin: 15px 0 0 0;&lt;br /&gt;
  min-width: 200px;&lt;br /&gt;
  border: #cccccc 1px solid;&lt;br /&gt;
  background-color: #f9f9f9;&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  color: #818181;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dropdown (Select) individuell gestalten ===&lt;br /&gt;
&lt;br /&gt;
* oder als Custom Select stylen https://www.w3schools.com/howto/howto_custom_select.asp&lt;br /&gt;
* bringt aber Probleme mit sich, z.B. kein Scrollen sehr langer Dropdown-Listen (Problem ungelöst)&lt;br /&gt;
* https://www.clickstorm.de/blog/dropdown-css3/&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Datenbank-Ablage für Formulardaten anlegen ==&lt;br /&gt;
&lt;br /&gt;
* Custom Post Type (hier &amp;quot;gewinnspielteilnahme&amp;quot; als Beispiel) via Plugin &amp;quot;CPT-UI&amp;quot; anlegen&lt;br /&gt;
* Individuelle Felder für &amp;quot;Gewinnspielteilnahme&amp;quot; via &amp;quot;Advanced Custom Fields&amp;quot; anlegen (&amp;quot;Feldname&amp;quot;!!!), z. B.&lt;br /&gt;
** email&lt;br /&gt;
** firma&lt;br /&gt;
** usw.&lt;br /&gt;
&lt;br /&gt;
== Schritt 4: Formulardaten speichern und anzeigen ==&lt;br /&gt;
&lt;br /&gt;
* neue Datei anlegen child_theme/_contact_form.php&lt;br /&gt;
* folgenden Code integrieren (Beispielfelder anpassen!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php defined( 'ABSPATH' ) or die();&lt;br /&gt;
&lt;br /&gt;
function process_custom_contact()&lt;br /&gt;
{&lt;br /&gt;
    if (!isset($_POST['teilnahmebedingungen']) || ($_POST['teilnahmebedingungen'] !== &amp;quot;1&amp;quot;))&lt;br /&gt;
        return wp_send_json_error(array('message' =&amp;gt; 'Bitte die Teilnahmebedingungen akzeptieren!'), 403);&lt;br /&gt;
    if (!isset($_POST['datenschutzbestimmungen']) || ($_POST['datenschutzbestimmungen'] !== &amp;quot;1&amp;quot;))&lt;br /&gt;
        return wp_send_json_error(array('message' =&amp;gt; 'Bitte die Datenschutzbestimmungen akzeptieren!'), 403);&lt;br /&gt;
&lt;br /&gt;
    $existings = get_posts(array(&lt;br /&gt;
        'numberposts'	=&amp;gt; -1,&lt;br /&gt;
        'post_type'		=&amp;gt; 'gewinnspielteilnahme',&lt;br /&gt;
        'meta_key'		=&amp;gt; 'email',&lt;br /&gt;
        'meta_value'	=&amp;gt; sanitize_text_field($_POST['email']),&lt;br /&gt;
        'post_status'   =&amp;gt; array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash')&lt;br /&gt;
    ));&lt;br /&gt;
&lt;br /&gt;
    if (!empty($existings))&lt;br /&gt;
        return wp_send_json_error(array('message' =&amp;gt; 'Sie haben bereits teilgenommen!'), 403);&lt;br /&gt;
&lt;br /&gt;
    $title = sanitize_text_field($_POST['email']);&lt;br /&gt;
&lt;br /&gt;
    $participation = array(&lt;br /&gt;
        'post_type'     =&amp;gt; 'gewinnspielteilnahme',&lt;br /&gt;
        'post_title'    =&amp;gt; $title,&lt;br /&gt;
        'post_content'  =&amp;gt; '',&lt;br /&gt;
        'post_status'   =&amp;gt; 'draft',&lt;br /&gt;
        'post_author'   =&amp;gt; 1,&lt;br /&gt;
        'post_category' =&amp;gt; array()&lt;br /&gt;
    );&lt;br /&gt;
    $postID = wp_insert_post( $participation );&lt;br /&gt;
&lt;br /&gt;
    update_field('email', sanitize_text_field($_POST['email']), $postID);&lt;br /&gt;
    update_field('firma', sanitize_text_field($_POST['firma']), $postID);&lt;br /&gt;
    update_field('solution_bool', sanitize_text_field($_POST['solution_bool']), $postID);&lt;br /&gt;
    update_field('solution', sanitize_text_field($_POST['solution']), $postID);&lt;br /&gt;
    update_field('teilnahmebedingungen', sanitize_text_field($_POST['teilnahmebedingungen']), $postID);&lt;br /&gt;
    update_field('datenschutzbestimmungen', sanitize_text_field($_POST['datenschutzbestimmungen']), $postID);&lt;br /&gt;
&lt;br /&gt;
    if (!is_wp_error($postID)) {&lt;br /&gt;
        wp_send_json(array('message' =&amp;gt; 'Sie haben erfolgreich teilgenommen!'), 200);&lt;br /&gt;
    } else {&lt;br /&gt;
        wp_send_json_error(array('message' =&amp;gt; 'Fehler beim Versenden des Formulars!'), 500);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Hinzufügen eines Rest Api Endpunktes&lt;br /&gt;
add_action('rest_api_init', function () {&lt;br /&gt;
    // Kontaktanfrage&lt;br /&gt;
    register_rest_route('wp/v2', 'submit-contact-request', array(&lt;br /&gt;
        'methods' =&amp;gt; 'POST',&lt;br /&gt;
        'callback' =&amp;gt; 'process_custom_contact'&lt;br /&gt;
    ));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PHP-Datei in functions.php inkludieren &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
include '_contact_form.php';&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Quellen =&lt;br /&gt;
&lt;br /&gt;
* TBD&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HowTo]]&lt;br /&gt;
[[Kategorie:WordPress]]&lt;/div&gt;</summary>
		<author><name>Sebastian.kalms</name></author>
	</entry>
</feed>