Mail-Link mit Anti-Spam-Schutz
Lesezeit: ca. 2 Minuten
Dieses Beispiel zeigt, wie man den Wert eines Kontakt-Feldes mit dem Namen „contact_email“ lädt und in einem Mail-Link verwendet, um den Anti-Spam-Schutz der Seite zu erhöhen.
Die Mail-Adresse wird hier mit der WordPress-Funktion antispambot() geschützt.
email us at <a href="<?php echo esc_url( 'mailto:' . antispambot( get_field(‘contact_email’ ) ) ); ?>"><?php echo esc_html( antispambot( get_field('contact_email' ) ) ); ?></a>
So sieht die Ausgabe im Seiten-Quelltext aus:
email us at <a href="mailto:&#104;.&#098;&#101;&#099;k&#101;&#114;&#064;&#114;&#097;ap&#045;ste&#105;&#110;e&#114;t&#046;&#100;&#101;" target="_blank">h&#046;&#098;ec&#107;e&#114;&#064;&#114;aap&#045;&#115;&#116;&#101;in&#101;r&#116;&#046;&#100;&#101;</a>
Fans des Hardcodierens finden hier einen guten Codierer.
Im Frontend werden die Link-Beschriftungen für den User lesbar dargestellt.
Um nun pauschal alle Mailto-Links auf der Webseite mit antispambot zu sichern, füge ich die folgende Funktion in die functions.php ein:
/**
* Fügt Antispambot für Email- und Telefon-Links ein.
* @param $buffer
*
* @return array|string|string[]|null
*/
function obfuscate_emails_and_phones_in_output($buffer) {
// Suche nach E-Mail-Adressen, Mailto-Links und Tel-Links
$buffer = preg_replace_callback(
'/(<a href="mailto:([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})">([^<]+)<\/a>)|([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})|(<a href="tel:([+0-9 ()-]+)">([^<]+)<\/a>)|(\+?[0-9 ()-]+)/',
function ($matches) {
if (!empty($matches[2])) {
// Mailto-Link gefunden
$email = $matches[2];
return '<a href="mailto:' . antispambot($email) . '">' . antispambot($email) . '</a>';
} elseif (!empty($matches[4])) {
// Einfache E-Mail-Adresse gefunden
return antispambot($matches[4]);
} elseif (!empty($matches[6])) {
// Tel-Link gefunden
$phone = $matches[6];
return '<a href="tel:' . esc_attr($phone) . '">' . esc_html($phone) . '</a>';
} elseif (!empty($matches[8])) {
// Einfache Telefonnummer gefunden
return esc_html($matches[8]);
}
return $matches[0];
},
$buffer
);
return $buffer;
}
/**
* Startet die Obfuskation von E-Mails und Telefonnummern.
*/
function start_email_and_phone_obfuscation() {
ob_start('obfuscate_emails_and_phones_in_output');
}
add_action('template_redirect', 'start_email_and_phone_obfuscation');
Die Telefonnummern werden lediglich durch HTML-Escaping gesichert, da es keine entsprechende Funktionalität zu antispambot für Telefonnummern gibt.