【WordPress】フィルターでaタグからtarget=”_blank”を削除する

このサイトはWordPressで作成されています。
このサイトのaタグからtarget="_blank"を削除することにしたのですが、該当箇所が多いため手作業での削除をあきらめました。
そこで、WordPressのフィルター機能を使って、取り除いてみることにしました。

the_contentフィルターで削除する

記事データを整形したり、ショートコードを実行などはthe_contentフィルターで行っています。

そこで、aタグからtarget="_blank"を削除するのもthe_contentフィルターで行います。

フィルターでaタグからtarget="_blank"を削除するコード

次のコードをテーマのfunctions.phpや自作プラグインに記述します。

  • add_filter('the_content','my_target_blank_delete',99);
  • function my_target_blank_delete($content){
  • $pattern = '/(<a .*?)(target="_blank")(.*?>)/';
  • $replacement = '$1$3';
  • return preg_replace($pattern,$replacement,$content);
  • }
AFFS Simple Code Viewer
Copy

記事データから単純にtarget="_blank"を取り除くだけでいいような気がしますが、この記事のように記事中で使用しているケースが考えられます。
そのためaタグ内のtarget="_blank"を正規表現で探して置換しています。

内部リンクのみtarget="_blank"を削除するコード

内部リンクのみ削除する場合は、次のコードでいけます。

  • add_filter('the_content','my_target_blank_delete',99);
  • function my_target_blank_delete($content){
  • $pattern = '/(<a.*?href="(\/|https?:\/\/ドメイン名).*?)target="_blank"(.*?>)/';
  • $replacement = '$1$3';
  • return preg_replace($pattern,$replacement,$content);
  • }
AFFS Simple Code Viewer
Copy

ドメイン名の部分は、実際のものに置き換えてください。
対象となるURLを次の3パターンで想定しています。

  • http://ドメイン名
  • https://ドメイン名
  • /

また、あまり無いと思うので、target="_blank"がhrefの前に来る場合を想定していません。

Search Regexプラグインで取り除く

Search Regexというプラグインを使うと、記事データから直接target="_blank"を取り除けますね。
フィルターで取り除く場合はサーバーの負担が少しだけ増えるので、思い切って記事データを書き換えてしまうのもいいかもしれません。
なお、書き換えなくてもいいものまで書き換えてしまうなどの失敗もあるので、自分の責任でおこなう必要があります。

導入していない場合は、プラグインの新規追加でインストールしましょう。
インストールしたら、ツールからSearch Regexを開きます。

Search Regexでtarget=

開いたら、次のように入力します。

  • 検索

    全て取り除く:(<a .*?)(target="_blank")(.*?>)
    内部リンクのみ:(<a.*?href="(\/|https?:\/\/ドメイン名).*?)target="_blank"(.*?>)

  • 検索フラグ

    「大文字小文字の区別なし」「正規表現」にチェックを入れる

  • 置換

    $1$3

「検索」を押すと、置換した結果が表示されます。
注:まだ置換されていません。

Search Regexの置換プレビュー

一通り確認して、大丈夫そうなら「すべて置換」を押して記事データを書き換えましょう。