E-Mails ins Frontend ausgeben ist immer eine unangenehme Sache. Crawler holen sich deine E-Mail und dann erhälst du ziemlich viel Spam. Um deine E-Mail Adresse ein bisschen zu schützen kann man versuchen sie im HTML zu verstecken und nur für echte Menschen lesbar machen.

E-Mail verstecken als praktischer WordPress Shortcode

Damit alles aus dem Gutenberg oder Elementor funktioniert habe ich einen handlichen Shortcode gebaut, den du wie folgt verwenden kannst: [jl_protected_mail email="[email protected]"]

function print_protected_email( $atts ) {

    $atts = shortcode_atts( 
        [
            // Fallback default E-Mail z.b. ein allgemeiner Theme Option Wert (jl_theme_email)
            'email' =>  get_theme_mod('jl_theme_email')
        ], 
    $atts );
    
    if ( '' !== trim($atts['email']) && filter_var($atts['email'], FILTER_VALIDATE_EMAIL) ) {
        $email = $atts['email'];
        $explodeArr = explode('@',$email);
        $emaildomain = $explodeArr[1];
        $emailname = $explodeArr[0];

        $output = '<a href="#" 
        class="cryptedmail" 
        style="display: inline"
        onclick="window.location.href = \'mailto:\' + this.dataset.name + \'@\' + this.dataset.domain; return false;"
        data-name="'. $emailname .'" 
        data-domain="'. $emaildomain .'">
            <span><span data-name="'. $emailname .'" data-domain="'. $emaildomain .'"></span></span>
        </a>';
        
        return $output;
    }
}
add_shortcode( 'jl_protected_email', 'print_protected_email' );

Zusätzlich brauchst du noch dieses CSS

.cryptedmail > span > span:after {
    content: attr(data-name) "@" attr(data-domain); 
}

Idee / Code stammt von: https://stackoverflow.com/questions/163628/making-email-addresses-safe-from-bots-on-a-webpage

Filter: Ersetze automatisch alle E-Mails im the_content mit diesem Shortcode

Pixelbarts Filter um auf alle E-Mails einen Shortcode zu legen:

add_filter('the_content', function ($content) {

    // @source: https://stackoverflow.com/a/15050961
    $regex = '/[a-z\d._%+-][email protected][a-z\d.-]+\.[a-z]{2,4}\b/mi';

    preg_match_all($regex, $content, $matches, PREG_SET_ORDER, 0);

    if ($matches) {
        $results = [];
        $shortcodes = [];

        foreach ($matches as $match) {
            $results[] = $match[0];
        }

        // Die doppelten Einträge entfernen
        $results = array_unique($results);

        foreach ($results as $result) {
            $shortcodes[] = sprintf('[jl_protected_email email="%s"]', $result);
        }

        // Die E-Mails mit den Shortcodes ersetzen
        $content = str_replace($results, $shortcodes, $content);
    }

    return $content;
});

War der Beitrag hilfreich?

Author

ist PHP Entwickler und möchte hier Einsteigern ein bisschen Zeit sparen indem er seine Ideen teilt. Arbeitet außerdem als Allrounder bei docrelations.de und entwickelt zwei coole Projekte: jadento.de | lifeisabinge.com

Schreib deine Meinung