{"id":1894,"date":"2025-06-12T09:09:51","date_gmt":"2025-06-12T08:09:51","guid":{"rendered":"https:\/\/ghanim-solution.de\/?p=1894"},"modified":"2025-06-12T10:40:21","modified_gmt":"2025-06-12T09:40:21","slug":"schritt-fur-schritt-anleitung-kontaktformular-per-shortcode","status":"publish","type":"post","link":"https:\/\/ghanim-solution.de\/index.php\/2025\/06\/12\/schritt-fur-schritt-anleitung-kontaktformular-per-shortcode\/","title":{"rendered":"Schritt-f\u00fcr-Schritt-Anleitung: Kontaktformular per Shortcode"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 <strong>1. Shortcode-Funktion in <code>functions.php<\/code> registrieren<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<pre><code class=\"language-php\">\n\/\/ kontaktformular per shortcode laden\nfunction mein_kontaktformular_shortcode() {\n    ob_start();\n    require get_stylesheet_directory() . '\/parts\/php\/kontaktformular.php'; \/\/ Pfad anpassen\n    return ob_get_clean();\n}\nadd_shortcode('kontaktformular', 'mein_kontaktformular_shortcode');\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udccc <strong>Was das macht:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gibt deren Inhalt zur\u00fcck, wenn du <code>[<span style=\"color: red; font-size: revert;\">kontaktformular<\/span>]<\/code> im Editor verwendest.<\/li>\n\n\n\n<li>L\u00e4dt die Datei <code>kontaktformular.php<\/code> aus dem Unterordner <code>\/parts\/php\/<\/code> deines Child-Themes.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfa8 <strong>2. CSS-Datei einbinden (<code>contact.css<\/code>)<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<pre><code class=\"language-php\">\nfunction kontaktformular_styling() {\n    wp_enqueue_style(\n        'kontaktformular-style',\n        get_stylesheet_directory_uri() . '\/custom-styles\/contact.css' \/\/ Pfad zur CSS-Datei\n    );\n}\nadd_action('wp_enqueue_scripts', 'kontaktformular_styling');\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83d\udccc <strong>Hinweis:<\/strong> <\/h4>\n\n\n\n<p>Lege die Datei <code>contact.css<\/code> im Verzeichnis <code>\/custom-styles\/<\/code> deines Child-Themes an.<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"> <strong>3. Datei <code>kontaktformular.php<\/code> in <code>\/parts\/php\/<\/code> anlegen<\/strong><\/h3>\n\n\n\n<pre><code class=\"language-php\">\n&lt;?php\n$empfaenger = 'info@example.com'; \/\/ E-Mail-Adresse des Admins\n\n$fehler = '';\n$erfolg = '';\n\nif ($_SERVER[&quot;REQUEST_METHOD&quot;] === &quot;POST&quot; &amp;&amp; isset($_POST['kontaktseite_nonce']) &amp;&amp; wp_verify_nonce($_POST['kontaktseite_nonce'], 'kontaktformular_absenden')) {\n    $vorname = sanitize_text_field($_POST['vorname']);\n    $nachname = sanitize_text_field($_POST['nachname']);\n    $email = sanitize_email($_POST['email']);\n    $nachricht = sanitize_textarea_field($_POST['nachricht']);\n\n    if (empty($vorname) || empty($nachname) || empty($email) || empty($nachricht)) {\n        $fehler = 'Bitte f\u00fcllen Sie alle Pflichtfelder aus.';\n    } elseif (!is_email($email)) {\n        $fehler = 'Bitte geben Sie eine g\u00fcltige E-Mail-Adresse ein.';\n    } else {\n        $betreff = 'Kontaktformular-Anfrage von ' . $vorname . ' ' . $nachname;\n        $inhalt = &quot;Vorname: $vorname\\nNachname: $nachname\\nE-Mail: $email\\nNachricht:\\n$nachricht&quot;;\n        $headers = [\n            'Content-Type: text\/plain; charset=UTF-8',\n            &quot;From: $vorname $nachname &lt;$email&gt;&quot;\n        ];\n\n        \/\/ Best\u00e4tigung an den Absender\n        $confirmation_subject = 'Best\u00e4tigung: Ihre Nachricht wurde erfolgreich gesendet';\n        $confirmation_body = &quot;Hallo $vorname,\\n\\nvielen Dank f\u00fcr Ihre Nachricht. Wir melden uns bald bei Ihnen.\\n\\nIhre Nachricht war:\\n$nachricht&quot;;\n        wp_mail($email, $confirmation_subject, $confirmation_body, $headers);\n\n        \/\/ Mail an Admin\n        if (wp_mail($empfaenger, $betreff, $inhalt, $headers)) {\n            wp_safe_redirect(home_url('\/danke\/'));\n            exit;\n        } else {\n            $fehler = 'Beim Senden ist ein Fehler aufgetreten.';\n        }\n    }\n}\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>Erg\u00e4nze die Datei <strong><code>kontaktformular.php<\/code><\/strong> ganz unten um folgenden Html-Code. :<\/p>\n\n\n\n<pre><code class=\"language-html\">\n&lt;div class=&quot;kontaktformular&quot;&gt;\n    &lt;h1&gt;Kontaktformular&lt;\/h1&gt;\n\n    &lt;?php if ($fehler): ?&gt;\n        &lt;p style=&quot;color:red;&quot;&gt;&lt;?php echo esc_html($fehler); ?&gt;&lt;\/p&gt;\n    &lt;?php endif; ?&gt;\n\n    &lt;?php if ($erfolg): ?&gt;\n        &lt;p style=&quot;color:green;&quot;&gt;&lt;?php echo esc_html($erfolg); ?&gt;&lt;\/p&gt;\n    &lt;?php endif; ?&gt;\n\n    &lt;form action=&quot;&lt;?php echo esc_url(get_permalink()); ?&gt;&quot; method=&quot;post&quot;&gt;\n        &lt;?php wp_nonce_field('kontaktformular_absenden', 'kontaktseite_nonce'); ?&gt;\n\n        &lt;p&gt;\n            &lt;label for=&quot;vorname&quot;&gt;Vorname*:&lt;\/label&gt;&lt;br&gt;\n            &lt;input type=&quot;text&quot; name=&quot;vorname&quot; id=&quot;vorname&quot; required&gt;\n        &lt;\/p&gt;\n\n        &lt;p&gt;\n            &lt;label for=&quot;nachname&quot;&gt;Nachname*:&lt;\/label&gt;&lt;br&gt;\n            &lt;input type=&quot;text&quot; name=&quot;nachname&quot; id=&quot;nachname&quot; required&gt;\n        &lt;\/p&gt;\n\n        &lt;p&gt;\n            &lt;label for=&quot;email&quot;&gt;E-Mail*:&lt;\/label&gt;&lt;br&gt;\n            &lt;input type=&quot;email&quot; name=&quot;email&quot; id=&quot;email&quot; required&gt;\n        &lt;\/p&gt;\n\n        &lt;p&gt;\n            &lt;label for=&quot;nachricht&quot;&gt;Nachricht*:&lt;\/label&gt;&lt;br&gt;\n            &lt;textarea name=&quot;nachricht&quot; id=&quot;nachricht&quot; rows=&quot;5&quot; required&gt;&lt;\/textarea&gt;\n        &lt;\/p&gt;\n\n        &lt;p&gt;\n            &lt;button type=&quot;submit&quot;&gt;Absenden&lt;\/button&gt;\n        &lt;\/p&gt;\n    &lt;\/form&gt;\n&lt;\/div&gt;\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. CSS f\u00fcr <code>contact.css<\/code> erstellen<\/strong><\/h3>\n\n\n\n<pre><code class=\"language-css\">\n.kontaktformular {\n  max-width: 600px;\n  margin: 0 auto;\n  padding: 2rem;\n  background-color: #f9f9f9;\n  border-radius: 12px;\n  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n  font-family: system-ui, sans-serif;\n}\n\n.kontaktformular h1 {\n  text-align: center;\n  font-size: 1.75rem;\n  margin-bottom: 1.5rem;\n  color: #333;\n}\n\n.kontaktformular label {\n  display: block;\n  margin-bottom: 0.25rem;\n  font-weight: 600;\n  color: #444;\n}\n\n.kontaktformular input,\n.kontaktformular textarea {\n  width: 100%;\n  padding: 0.75rem;\n  margin-bottom: 1rem;\n  border: 1px solid #ccc;\n  border-radius: 8px;\n  font-size: 1rem;\n  box-sizing: border-box;\n}\n\n.kontaktformular textarea {\n  resize: vertical;\n  min-height: 150px;\n}\n\n.kontaktformular button {\n  background-color: #0073aa;\n  color: #fff;\n  border: none;\n  cursor: pointer;\n  font-weight: bold;\n  padding: 0.75rem 1.5rem;\n  border-radius: 8px;\n  font-size: 1rem;\n  transition: background-color 0.3s ease;\n}\n\n.kontaktformular button:hover {\n  background-color: #005f8d;\n}\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Formular in Gutenberg einf\u00fcgen<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u00d6ffne deine Seite <strong>\u201eKontakt\u201c<\/strong> im <strong>Block-Editor (Gutenberg)<\/strong>.<\/li>\n\n\n\n<li>F\u00fcge einen <strong>\u201eShortcode\u201c-Block<\/strong> ein.<\/li>\n\n\n\n<li>Trage dort den Shortcode ein:<\/li>\n<\/ol>\n\n\n\n<pre><code class=\"language-csharp\">\n&#91;kontaktformular&#93;\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 Ergebnis<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kontaktformular wird auf der Seite angezeigt.<\/li>\n\n\n\n<li>E-Mails gehen an den Website-Betreiber und eine Best\u00e4tigung an den Absender.<\/li>\n\n\n\n<li>Nach Absenden erfolgt eine <strong>Weiterleitung zur Danke-Seite<\/strong> (<code>\/danke\/<\/code> \u2013 du musst diese Seite anlegen!).<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd12 Sicherheitshinweis<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Durch <code>wp_verify_nonce<\/code> ist das Formular <strong>vor CSRF-Angriffen gesch\u00fctzt<\/strong>.<\/li>\n\n\n\n<li>Mit <code>sanitize_\u2026()<\/code> werden alle Eingaben gesichert verarbeitet.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udd27 1. Shortcode-Funktion in functions.php registrieren \/\/ kontaktformular per shortcode laden function mein_kontaktformular_shortcode() { ob_start(); require get_stylesheet_directory() . &#8216;\/parts\/php\/kontaktformular.php&#8217;; \/\/ Pfad anpassen return ob_get_clean(); } add_shortcode(&#8216;kontaktformular&#8217;, &#8216;mein_kontaktformular_shortcode&#8217;); \ud83d\udccc Was das macht: \ud83c\udfa8 2. CSS-Datei einbinden (contact.css) function kontaktformular_styling() { wp_enqueue_style( &#8216;kontaktformular-style&#8217;, get_stylesheet_directory_uri() . &#8216;\/custom-styles\/contact.css&#8217; \/\/ Pfad zur CSS-Datei ); } add_action(&#8216;wp_enqueue_scripts&#8217;, &#8216;kontaktformular_styling&#8217;); \ud83d\udccc Hinweis: Lege [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/posts\/1894","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/comments?post=1894"}],"version-history":[{"count":12,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/posts\/1894\/revisions"}],"predecessor-version":[{"id":1911,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/posts\/1894\/revisions\/1911"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/media\/1900"}],"wp:attachment":[{"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/media?parent=1894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/categories?post=1894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ghanim-solution.de\/index.php\/wp-json\/wp\/v2\/tags?post=1894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}