広告

外部リンクにアイコンをつける – WordPress

※この記事は広告およびアフィリエイトプログラムによる収益をぼちぼち得ています。
新しく簡単にまとめた記事を書きました。CSSのみで実装する例です。
広告

やること

記事内のリンクが外部リンクだったら、そのリンクのお尻に外部リンクアイコンをつける。

方法

WordPress管理画面>外観>テーマエディタ
から、header.php を編集しました。

<?php wp_head(); ?>

の後ろに以下のコードを入れました。

<!-- 外部リンクにアイコンつける -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
jQuery(function(){
    jQuery('.entry-content p a[href*="//"]').not('[href*="'+location.hostname+'"]').each(function(){
        if(jQuery(this).text() !== ""){
            jQuery(this).append('<i class="fas fa-external-link-square-alt"></i>');
        }
    })
});
</script>
<!-- END -->

こちらは私が実際に入れたコードです。コードの内容・詳細は、参考にした記事で詳しく解説してくださっているので、そちらをご覧ください。

変更箇所

私は、参考にした記事で紹介されているコードの、8行目のこちらの部分を変更しています。

jQuery(this).append('<i class="fas fa-external-link-square-alt"></i>');

prependとappend

リンクの後にアイコンをつけたい場合は「.prepend()」、前につけたい場合は「.append()」を使えばいいらしく、私は後につけたかったので、「.prepend()」を使っています。

別のFont Awesomeアイコンに

参考にした記事で使用していたFont Awesomeのアイコンは「fa-external-link-alt」というアイコンでしたが、私は「external-link-square-alt」というアイコンにしました↓

Square Up Right Icon | Font Awesome
Square Up Right icon in the Solid style. Make a bold statement in small sizes.. Available now in Font Awesome 6.

カスタムCSS

また、見た目を整えるため、以下のCSSをWordPress テーマのカスタムCSS欄に追加しました。

/* 外部リンクアイコン */
i.fas.fa-external-link-square-alt{
 font-size: .9em;
 margin: 0 .3em;
}

アイコンの大きさを少し小さくし、左右の空間を開けています。

追記(FontAwesomeバージョン変更)

上記の方法だと、私が使ってるWordPressテーマ「MH Magazine」のFont Awesomeのバージョンと相容れず、テーマのカスタマイズで設定したFont Awesomeアイコンが表示されなくなったので、急遽修正。

読み込むFont Awesomeバージョンが違うと、アイコンを呼び出すクラス名も違ってくるため、アイコンが表示されなくなってしまうことがよくある。今回、Font Awesome v4.7.0のクラス名を試しに使用してみると、私のテーマでもアイコンが呼び出せた。

呼び出したFont Awesomeアイコン

fa-external-link-square: Font Awesome Icons
Font Awesome, the iconic font and CSS framework

header.phpに追加した箇所

<!-- 外部リンクにアイコンつける -->
<script>
    jQuery(function(){
        jQuery('.entry-content p a[href*="//"]').not('[href*="'+location.hostname+'"]').each(function(){
            if(jQuery(this).text() !== ""){
                jQuery(this).append('<i class="fa fa-external-link-square" aria-hidden="true"></i>');
            }
        })
    });
 </script>
 <!-- END -->

CSS

クラス名が変わったので、CSSも修正。

/* 外部リンクアイコン */
 i.fa.fa-external-link-square{
 font-size: .9em;
 margin: 0 .3em;
}

さらに追記(CSSだけで実装)

上記はCSSだけでもできると先輩に教えてもらいました。

外部リンクにアイコン付けるだけならCSSのみでもできるかも?
すでに知ってそうではあるね…
でもjQueryでDOM要素をループさせるとレンダリングに時間掛かっちゃう気がして!

知りませんでした (^q^)

CSS修正

header.php に追加したコードを消し、カスタムCSSに追加したコードを修正。

/* 外部リンクアイコン */
.entry-content p a:not([href^="https://kbnt.xyz/"]):after{
 font-family: FontAwesome;
 content: "\f14c";
 font-size: .9em;
 margin: 0 .3em;
}

.entry-content で記事内限定、目次等に付加されぬよう p をつけてます。(自分用メモ)
Font Awesomeのアイコンは上でも呼んでいたコレをUnicodeで呼んできてます。(自分用メモ)

CSS多機能すぎてもう置いてけぼり\(^o^)/

参考記事

新しい記事書きました

新しく簡単にまとめた記事を書きました。CSSのみで実装する例です。

コメント

タイトルとURLをコピーしました