有時候想在博客中向用户留言告訴他們讀者的 email 地址,讓用户直接通過 email 地址聯繫,但是這樣簡單展示 email 地址被機器收集,然後收到一大堆 spam 。

防止 Email 被機器收集

WordPress 默認有 antispambot 函數,它可以將 email 地址轉換成機器無法識別而瀏覽器能夠正確顯示的郵件地址,所以我們可以在主題的 functions.php 文件中添加如下的代碼:

add_shortcode( 'email', 'wpjam_email_shortcode_handler' );
function wpjam_email_shortcode_handler( $atts, $content='' ) {
    extract( shortcode_atts( array(
        'mailto' => '0'
    ), $atts ) );

    return antispambot( $content, $mailto );
}

Antispambot ShortCode 這個插件使用非常簡單,上傳激活之後,如果只是簡單展示郵件地址,只需要在日誌內容輸入以下內容:

[email]you-email-address@email.com[/email]

顯示效果:you-email-address@email.com

查看源代碼,你會發現 email 地址 HTML 源代碼已經是:

you-email-address@ email.com

這樣的代碼,機器人是很難收集的,但是普通用户則可以直接閲讀,不受影響。

如果你想把 email 地址顯示為連接,可以加上 link 參數,如:

[email link="1"]you-email-address@email.com[/email]

顯示結果為:you-email-address@email.com

插件下載:Antispambot ShortCode

自動隱藏郵件地址

當然,如果你不想使用 shortcode,而想直接在日誌中輸入的郵件地址也能防止被機器收集,可以使用提供的代碼自動隱藏郵件地址防止垃圾郵件。

下面的代碼通過正則提取內容中的郵件地址,然後使用 WordPress 的 antispambot 函數隱藏 email 地址,同樣將代碼複製到當前主題的 functions.php 文件中即可。

add_filter( 'the_content', 'wpjam_hide_emails', 99 );
add_filter( 'widget_text', 'wpjam_hide_emails', 99 );
function wpjam_hide_emails($content) {
	$pattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})/i';
	return preg_replace_callback($pattern, "wpjam_hide_emails_callback", $content);
}
function wpjam_hide_emails_callback($match) {
	return antispambot($match[1]);
}