WordPressの投稿・固定ページの本文からtarget属性(_blankなど)を取り除く方法

先日、Google Chromeで「target=”_blank”」の入ったAmazonのAリンクを開こうとしました。

すると、開いた瞬間すぐに閉じてしまいました。どうやら原因は、広告をブロックする拡張が入っていたせいで、広告リンクと判断されて閉じてしまったようです。

おそらくこれと同じ症状です。

Adblockのフィルターやポップアップブロックが厳しすぎるせいか、Adblockが有効化されていると普段RSSに登録しているサイトや画像検索をする際に、「リンクをホイールクリックして新しいタブで開く」「リンクから... - Chrome(クローム) | 教えて!goo

で、「これを解消するにはどうしたらよいのか?」と疑問に思ったので、いろいろ試してみたら、「target=”_blank”」を入れなければ、現在のタブにAmazonページが開かれるので、閉じることはないようでした。「target=”_self”」の挙動ですね。

で僕のサイトの場合、外部サイトへのリンクは、「target=”_blank”」を利用して、新規タブで開いて、内部リンクは同じタブで開くといった仕様にしていました。

ただ、最近思うんです「target=”_blank”」は必要なのか?と。以下に書かれている記事と同様の疑問を感じていました。

そんな時は、実際に双方を試してみることが重要です。

ただ、全ての記事の「target=”_blank”」を編集して外すのは面倒くさすぎるので、「Wordpressの本文からtarget=”_blank”を除去する方法」を書いたのでメモがてら紹介です。

スポンサーリンク
レクタングル(大)広告

投稿本文からtarget=”_blank”を削除するコード

で、書いたコードがこちらです。Wordpressテーマのfunctions.phpにコピペするだけで利用できます。

//本文からtarget属性を取り除く
add_filter('the_content', function ($the_content){
  //target属性を取り除く
  $the_content = preg_replace('/ +target=["][^"]*?["]/i', '', $the_content);
  $the_content = preg_replace('/ +target=[\'][^\']*?[\']/i', '', $the_content);

  return $the_content;
}, 999999999);

これにより、よほどトリッキーなtarget属性の書き方をしてない限りは、ほぼ全て取り除くことができると思います。

今回書いたコードは、target属性全てを取り除くことです。_blank以外の_self、_top、_parentでも全て取り除かれるコードなので注意が必要です。
また、上記コードは無名関数を利用しているので、PHP5.4以上でないとエラーが出ると思います。

動作確認

今回のコードをfunctions.phpに貼り付けることで、本文中の以下のコードが

<a href="https://nelog.jp/" target="_blank">寝ログ</a>

以下のようにtarget属性を取り除いたものに変更されます。

<a href="https://nelog.jp/">寝ログ</a>

まとめ

今回のコードを利用することで、Wordpressの投稿・固定ページ全ての本文中からtarget属性を取り除くことができると思います。

とりあえず「サイトからtarget属性を取り除きたい」と思ったときは、記事を一つ一つ修正するよりは、かなり手軽ではないかと思います。

そんなわけで「サイト全体をtarget属性なしに統一したい」とか「target属性ありとtarget属性なしのサイト上のパフォーマンスを計測したい」なんて場合には、手軽に試せる方法かと思います。