【WordPress】外部リンクにアイコンを付ける(画像にはアイコンを付けない)

WordPressで自動的に外部リンクにアイコンを付け、
画像にはアイコンを付けないような設定をしてみます。

プラグインでも出来ますが、今回はfunctions.phpへのコードの追記と
CSSの設定だけで実現できるもの。

WordPressのテーマ内のfunctions.phpに以下のコードを追加します。

// 外部リンクにアイコンを付ける
add_filter( 'the_content', 'add_external_content', 12 );
function add_external_content( $content ) {
$add_img = 0; // img(画像での外部リンク)にもアイコン付ける場合は 1 付けない場合は 0
preg_match_all( "/<a[^>]+?href[^>]+?>/i", $content, $link_array );

$my_url = preg_quote( rtrim( get_bloginfo("url"), "/" ) . "/", "/" );

foreach( array_unique( $link_array[0] ) as $link ) {
$replaced = $link;

if( !preg_match( "/href=['|\"]?\s*?${my_url}[^>]+?['|\"]/i", $link ) ) {
$replaced = str_replace( ">", " class=\"external ext_icon\">", $replaced );
$content = str_replace( $link, $replaced, $content );
if( !$add_img ) {
// img の時はアイコン消す(class="external" は残す)
$content = preg_replace(
"/(<a[^>]+?href[^>]+?external) ext_icon([^>]+?>\s*?<\s*?img[^>]+?src[^>]+?>\s*?<\/a>)/is",
"$1$2",
$content
);
}
}
}
return $content;
}

CSSには以下を追加し、CSSと同階層にlink-icon.svgをアップロードします。
※ファイル名や設置場所は適宜変更してください。

a.ext_icon[target="_blank"] {
background: url(./link-icon.svg) 100% 50% no-repeat;
padding-right: 15px;
margin-right: 2px;
}

aタグのあとに改行が入るとテキストと認識してしまうため、アイコンの付与にCSSには.ext_iconだけではなく、[target="_blank"]も判断基準に付け加えています。

参考:https://www.iscle.com/web-it/wp/external-link-icon.html
http://thk.kanzae.net/net/wordpress/t1316/
https://fukuro-press.com/wp-way-to-add-icon-to-ext-link/

関連記事

コメントを残す

*