Wiki

für WordPress-Entwickler

Anleitungen, Snippets und mehr…

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 &lt;a href="mailto:&amp;#104;.&amp;#098;&amp;#101;&amp;#099;k&amp;#101;&amp;#114;&amp;#064;&amp;#114;&amp;#097;ap&amp;#045;ste&amp;#105;&amp;#110;e&amp;#114;t&amp;#046;&amp;#100;&amp;#101;" target="_blank">h&amp;#046;&amp;#098;ec&amp;#107;e&amp;#114;&amp;#064;&amp;#114;aap&amp;#045;&amp;#115;&amp;#116;&amp;#101;in&amp;#101;r&amp;#116;&amp;#046;&amp;#100;&amp;#101;&lt;/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.