WordPressに投稿されたコメント内のリンクを別ウィンドウ(タブ)で開くようにする方法です。
通常はコメント内のリンクは同じウィンドウで開きますが、これをfunctions.phpのカスタマイズで改善します。
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
特に外部リンクが同じウィンドウってのが嫌なんだ。
![](https://takemi.blog/wp-content/uploads/2024/03/D46ED1C42500466BB89D4AD9CC80048F.webp)
他サイトはタブで開くイメージがあるよね。
◆ 安全にfunctions.phpをカスタマイズする方法
functions.phpの修正に不安がある人は以下を参考にしてください。
functions.phpを直接修正するのは不具合時の対処やテーマ更新時に大変ですよね。それでも手間を減らす方法もあり、ここで紹介する方法と以下の記事の内容でそこそこ安全に改造できます。拡張用のfunctions.phpを新規作成する最初にカスタマイズ用のコードを記述するためのphpファイルを作成します。配置するディレクトリとファイル名は好みで大丈夫です。とりあえず、ここではfunctions.phpと同じディレクトリにextend-functions.phpとして作成し...
コードを追加する
functions.phpとかに以下のコードを追加します。
// コメント内のaタグに"_blank"と"noopener"を付加
add_filter( 'comment_text', function( $comment_text, $comment = null ) {
if ( $comment !== null ) {
$comment_text = preg_replace( '/<a /i', '<a target="_blank" ', $comment_text );
if ( preg_match_all( '/<a[^>]*>.*?<\/a>/is', $comment_text, $as ) ) {
foreach ( $as[0] as $a ) {
if ( preg_match( '/rel=[\'"]([^\'"]*)[\'"]/i', $a, $rel ) ) {
if ( ! preg_match( '/noopener/i', $rel[1] ) ) {
$replace = preg_replace( '/rel="/', 'rel="noopener ', $a, 1 );
$comment_text = preg_replace( '/' . preg_quote($a, '/') . '/', $replace, $comment_text, 1 );
}
} else {
$replace = preg_replace( '/ /', ' rel="noopener" ', $a, 1 );
$comment_text = preg_replace( '/' . preg_quote($a, '/') . '/', $replace, $comment_text, 1 );
}
}
}
}
return $comment_text;
}, 10, 2 );
仕組み
先程のコードを追加すると、aタグにtarget="_blank"属性が付加されます。
また、WordPressが標準出力するコメントはrel属性のnoopenerが付いてないので、それも付加します。
![](https://takemi.blog/wp-content/uploads/2023/09/00D90ECEDDFA45078397DE4A2A2F7549.webp)
noopener付加はサンプルが無かったので、正規表現を含めて自己流です。
あとがき
WordPressには、target="_blank"属性が付いてるリンクに自動的にnoopenerを付加する機能があります。
ただし、今回のように後から強制的に付加した場合は機能しないみたいです。たぶん、記事内で設置した場合のみ機能します。
この記事は参考になりましたか?
コメント