WordPressのPHPで外部リンクを自動でtarget="_blank"...にする方法
WordPressサイトで外部リンクを自動で別タブで開く処理をphp側で実装するコードです。
下記のコードをWordPressのテーマ内のfunctions.phpに追加することで実装できます。
function LinkTarget($content) {
// 外部リンクの正規表現パターン
$pattern = '/<a([^>]*)href=[\'"]([^\'"]+)[\'"]([^>]*)>/i';
// コンテンツ内のすべてのaタグを検索
$content = preg_replace_callback($pattern, function ($matches) {
// href属性の値を取得
$href = $matches[2];
// mailto: や tel: など、除外するリンクのパターン
$exclude_patterns = array('/^mailto:/i', '/^tel:/i');
// href属性が除外パターンにマッチする場合は元のaタグを返す
foreach ($exclude_patterns as $pattern) {
if (preg_match($pattern, $href)) {
return $matches[0];
}
}
if (filter_var($href, FILTER_VALIDATE_URL) && !preg_match('/^' . preg_quote(home_url(), '/') . '/', $href)) {
return '<a' . $matches[1] . 'href="' . $href . '" target="_blank" rel="noopener noreferrer"' . $matches[3] . '>';
} else {
// 外部リンクでない場合、元のaタグを返す
return $matches[0];
}
}, $content);
return $content;
}
add_action('template_redirect', function () {
ob_start('LinkTarget');
});
add_filter('the_content', 'LinkTarget');