有時候想在博客中向用户留言告訴他們讀者的 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]);
}