[WordPress] @から始まるTwitterのユーザーID(メンション)にリンクを付ける方法

2 min read

記事内の Twitter のユーザー ID のリンクをいちいち貼るのは面倒です。
また過去のリンク貼り忘れの記事にいちいち貼り直すのも面倒です。

自動的に @から始まる Twitter ユーザー ID にリンクを貼るようにしたいと思います。

追加するコード

functions.phpに以下のコードを追加します。
function filter_twitter_mention($content) {
       return preg_replace('/(?<![\\w])(@|@)([\\w]{1,15})/', "<a href=\"http://twitter.com/$2\">$1$2</a>", $content);
}
add_filter('the_content', 'filter_twitter_mention');
正規表現で@から始まるTwitterのユーザーIDらしき文字列にリンクを被せるような動きです。

ハッシュタグも同じ要領でリンク付けができるのですが、本文内で<a href="#">hoge</a>みたいにアンカーが使われていた場合の振り分けを考えないといけないので面倒くさそうです。

参考

メンションを抽出する正規表現は、PHP - TwitterのURL抽出の正規表現 - Qiitaおまけ @(メンション)判定を参考にさせて頂きました。
名前およびユーザー名は何文字まで?
  • ユーザー名は、最大15文字です。
  • 名前は、最大20文字です。
正規表現を見てて思ったんですが、そういえばユーザーIDの最大文字数は15文字なんでしたね。

追記

記事の本文だけではなくて、コメントにも同様の処理をしたい場合は以下のコードを合わせて追加すると良いです。
add_filter('comment_text', 'filter_twitter_mention');