Vielen Dank für Ihre Einsendung, $first_name $last_name. Wir haben Ihre Daten erhalten.

"; } return ob_get_clean(); } add_shortcode('custom_form', 'custom_form_shortcode');
50, 'class' => 'fresena-heimspiele', ], $atts, 'fresena_heimspiele'); $data = get_transient(self::CACHE_KEY); if ($data === false) { $data = self::fetch_home_games(); // auch bei leerem Ergebnis kurz cachen, um Requests zu drosseln set_transient(self::CACHE_KEY, $data, self::CACHE_TTL); } if (empty($data)) { return '

Keine Heimspiele gefunden.

'; } $limit = max(1, intval($atts['limit'])); $rows = array_slice($data, 0, $limit); ob_start(); ?>
Mannschaft Datum Uhrzeit Platz
$home, 'date' => $date ?: '', 'time' => $time ?: '', 'place' => $place ?: '', ]; // Minimal drosseln, shared hosting freundlich usleep(150000); } // Duplikate entfernen $uniq = []; $seen = []; foreach ($out as $r) { $key = md5($r['team'].'|'.$r['date'].'|'.$r['time'].'|'.$r['place']); if (!isset($seen[$key])) { $uniq[] = $r; $seen[$key] = true; } } return $uniq; } private static function http_get($url) { $resp = wp_remote_get($url, [ 'timeout' => 20, 'headers' => [ 'User-Agent' => 'Mozilla/5.0 (WordPress; FresenaHeimspiele/1.0)', ], ]); if (is_wp_error($resp)) return false; $code = wp_remote_retrieve_response_code($resp); if ($code < 200 || $code >= 300) return false; return wp_remote_retrieve_body($resp); } private static function extract_match_urls($html) { // match pages: /spiel/.../-/spiel/ preg_match_all('#https?://www\.fussball\.de/spiel/[^"\']+?/-/spiel/[A-Z0-9]+#i', $html, $m1); preg_match_all('#/spiel/[^"\']+?/-/spiel/[A-Z0-9]+#i', $html, $m2); $urls = []; if (!empty($m1[0])) $urls = array_merge($urls, $m1[0]); if (!empty($m2[0])) { foreach ($m2[0] as $rel) { $urls[] = 'https://www.fussball.de'.$rel; } } // Dedup $urls = array_values(array_unique($urls)); return $urls; } private static function extract_context_around_url($html, $url) { $pos = stripos($html, $url); if ($pos === false) return ''; // 3000 Zeichen vor/nach Link: genug Kontext für Datum/Uhrzeit/Teams $start = max(0, $pos - 3000); $len = 6000; $chunk = substr($html, $start, $len); // HTML tags minimieren $text = wp_strip_all_tags($chunk); $text = preg_replace('/\s+/', ' ', $text); return trim($text); } private static function parse_home_guest($text) { // Muster: "HEIMTEAM : GASTTEAM" if (preg_match('/(.+?)\s*:\s*(.+?)(?:\s+(?:Zum Spiel|Spielbericht|Details)|$)/i', $text, $m)) { $home = trim($m[1]); $guest = trim($m[2]); if ($home && $guest) { return ['home' => $home, 'guest' => $guest]; } } return null; } private static function parse_date($text) { if (preg_match('/(\d{1,2}\.\d{1,2}\.\d{2,4})/', $text, $m)) { $d = $m[1]; // 2-stelliges Jahr -> 20xx $parts = explode('.', $d); if (count($parts) === 3 && strlen($parts[2]) === 2) { $parts[2] = '20'.$parts[2]; $d = implode('.', $parts); } return $d; } return ''; } private static function parse_time($text) { if (preg_match('/(\d{1,2}:\d{2})/', $text, $m)) { return $m[1]; } return ''; } private static function extract_place_from_match_page($matchUrl) { $html = self::http_get($matchUrl); if (!$html) return ''; // Häufig ist ein Google-Maps-Link vorhanden; dessen Linktext ist i.d.R. "Platzname, Ort, Platz ..." // Wir extrahieren den ersten Linktext mit google.* im href. if (preg_match('#]+href="([^"]*google[^"]*)"[^>]*>(.*?)#is', $html, $m)) { $linkText = wp_strip_all_tags($m[2]); $linkText = preg_replace('/\s+/', ' ', $linkText); return trim(html_entity_decode($linkText, ENT_QUOTES | ENT_HTML5, 'UTF-8')); } // Fallback: suche nach "Platz" nahe am Wort "Sportanlage" o.ä. $text = wp_strip_all_tags($html); $text = preg_replace('/\s+/', ' ', $text); if (preg_match('/([^.]{0,80}(?:Sportanlage|Platz)[^.]{0,120})/i', $text, $m)) { return trim($m[1]); } return ''; } } Fresena_Heimspiele::init();

Formular zur Anmeldung

Vielen Dank für Ihre Einsendung, $first_name $last_name. Wir haben Ihre Daten erhalten.
"; } return ob_get_clean(); } add_shortcode('custom_form', 'custom_form_shortcode');
[test_wp_mail]

Teamklima & faires Miteinander – Eure Meinung zählt!

Liebe Spielerin,

Diese Umfrage ist anonym und soll helfen, unser Miteinander im Team zu verbessern. Bitte beantworte die Fragen ehrlich – es geht nicht darum, jemanden zu beschuldigen, sondern gemeinsam Lösungen zu finden, damit sich alle in der Mannschaft wieder wohlfühlen.


😊 Sehr wohl
🙂 Meistens wohl
😐 Geht so
🙁 Eher unwohl
😢 Gar nicht wohl


Sehr respektvoll
Meistens fair
Teils respektlos
Oft respektlos
Keine Meinung


Ja, oft
Manchmal
Selten
Nie


Ja, immer
Manchmal
Nein, ich wusste nicht wie
Nein, ich wollte mich nicht einmischen













Diese Umfrage ist vollständig anonym – es werden keine Namen oder E-Mail-Adressen gespeichert.

Teamklima & faires Miteinander – Anonyme Umfrage

Teamklima & faires Miteinander – Eure Meinung zählt!

Liebe Spielerin,
diese Umfrage ist anonym und soll helfen, unser Miteinander im Team zu verbessern. Bitte beantworte die Fragen ehrlich – es geht nicht darum, jemanden zu beschuldigen, sondern gemeinsam Lösungen zu finden.

😊 Sehr wohl
🙂 Meistens wohl
😐 Geht so
🙁 Eher unwohl
😢 Gar nicht wohl
Sehr respektvoll
Meistens fair
Teils respektlos
Oft respektlos
Keine Meinung
Ja, oft
Manchmal
Selten
Nie
Ja, immer
Manchmal
Nein, ich wusste nicht wie
Nein, ich wollte mich nicht einmischen

Diese Umfrage ist vollständig anonym – es werden keine Namen oder IP-Adressen gespeichert.

Teamklima & faires Miteinander – Anonyme Umfrage

Teamklima & faires Miteinander – Eure Meinung zählt!

Liebe Spielerin,
diese Umfrage ist anonym und soll helfen, unser Miteinander im Team zu verbessern. Bitte beantworte die Fragen ehrlich – es geht nicht darum, jemanden zu beschuldigen, sondern gemeinsam Lösungen zu finden.

😊 Sehr wohl
🙂 Meistens wohl
😐 Geht so
🙁 Eher unwohl
😢 Gar nicht wohl
Sehr respektvoll
Meistens fair
Teils respektlos
Oft respektlos
Keine Meinung
Ja, oft
Manchmal
Selten
Nie
Ja, immer
Manchmal
Nein, ich wusste nicht wie
Nein, ich wollte mich nicht einmischen

Diese Umfrage ist vollständig anonym – es werden keine Namen oder IP-Adressen gespeichert.

\r\n"; $headers .= "Content-Type: text/plain; charset=UTF-8\r\n"; // Mail senden if (mail($to, $subject, $message, $headers)) { echo "

Vielen Dank!

Deine Antworten wurden anonym übermittelt. Jede Rückmeldung hilft uns, als Team stärker zusammenzuwachsen. ⚽💪

"; } else { echo "

Fehler!

Leider konnte deine Nachricht nicht gesendet werden. Bitte informiere den Trainer.

"; } ?>
' ]; if (wp_mail($to, $subject, $message, $headers)) { echo '

Vielen Dank!

Deine Antworten wurden anonym übermittelt. Jede Rückmeldung hilft uns, als Team stärker zusammenzuwachsen. ⚽💪

'; exit; } else { echo '

Fehler!

Leider konnte deine Nachricht nicht gesendet werden. Bitte informiere den Trainer.

'; } } ?>

Teamklima & faires Miteinander – Eure Meinung zählt!

Liebe Spielerin,
diese Umfrage ist anonym und soll helfen, unser Miteinander im Team zu verbessern. Bitte beantworte die Fragen ehrlich – es geht nicht darum, jemanden zu beschuldigen, sondern gemeinsam Lösungen zu finden.


😊 Sehr wohl
🙂 Meistens wohl
😐 Geht so
🙁 Eher unwohl
😢 Gar nicht wohl


Sehr respektvoll
Meistens fair
Teils respektlos
Oft respektlos
Keine Meinung


Ja, oft
Manchmal
Selten
Nie


Ja, immer
Manchmal
Nein, ich wusste nicht wie
Nein, ich wollte mich nicht einmischen









Diese Umfrage ist vollständig anonym – es werden keine Namen oder IP-Adressen gespeichert.