メールアドレスをbotに拾われにくくする方法としてHTMLエンティティ化による「難読化」がありますが、WordPressでやるとビジュアルエディタが元のテキストに戻してしまいます。そのため、ショートコードを作ってやることで難読化します。

HTMLエンティティ化とは

sample@example.com

sample@example.com

のようにすることです。

ただ、これをそのままWordPressに張りつけるといつの間にかsample@example.comに戻ってしまいます。ビジュアルエディタがエンティティを戻してしまうのです。

ショートコードの作成

WordPressにはantispambot()というロジックそのものはあるのですが、ショートコードは用意されていないので作ってやる必要があります。

functions.phpに次のものを追加します。

/**
 * Hide email from Spam Bots using a shortcode.
 *
 * @param array  $atts    Shortcode attributes. Not used.
 * @param string $content The shortcode content. Should be an email address.
 *
 * @return string The obfuscated email address.
 */
function wpcodex_hide_email_shortcode( $atts , $content = null ) {
    if ( ! is_email( $content ) ) {
        return;
    }

    return antispambot( $content );
}
add_shortcode( 'email', 'wpcodex_hide_email_shortcode' );

これはCodexのサンプルを少し改変したものです。Codexサンプルはaタグでmailtoリンクを返していますが、わざわざbotにメールアドレスであることを教えているようなものなのでaタグを外しました。

これで、次のようにショートコードを書くと難読化されます。

[email]sample@example.com[/email]

さらなる難読化はJavaScriptを使う

すこし賢いbotだとHTMLエンティティをデコードして拾っていきそうです。もっとがんばるにはJavaScriptで動的生成することですが、個人的にはそこまでする必要性を感じないので必要な方はググってください。scriptタグを上記wpcodex_hide_email_shortcode()で返すようにすればOKですが、Autoptimizeプラグインとの相性は悪いのでご注意を。

関連リンク