[WordPress]RSSウィジェットのリンクを新規タブで開くようにする方法

  • 更新日:
  • 公開日:

WordPressに標準である、外部サイトなどの記事一覧を取得して表示するウィジェット「RSS」。

このRSSウィジェットが吐き出すリンク(アンカータグ)には設定から属性などが付けられません。外部サイトのリンクを表示している場合、新規タブで開くようにして欲しいという案件があったりするのではないでしょうか。

というわけでRSSウィジェットのアンカータグにtarget="_blank"を追加するスニペットのメモです。

RSSウィジェットのアンカータグにblank属性を追加する

スニペットと言ってもちょっとやり方が下手かも知れません。以下のようにコードをfooter.phpwp_footer()より下に記述します。

<?php wp_footer(); ?>
<?php if ( is_active_widget( false, false, 'rss' ) ) : ?>
    <script type="text/javascript">
    if ( !(typeof jQuery == 'undefined') ) {
        (function($){
            $('a.rsswidget').click(function() {
                if ($(this).attr('target') === undefined) {
                    $(this).attr('target', '_blank');
                }
            });
        })(jQuery);
    }
    </script>
<?php endif; ?>
</body>
</html>

2行目でRSSウィジェットが有効化されているか判定し、4行目でjQueryが読み込まれているか判定、6行目辺りからRSSウィジェットのリンクにblank属性を追加しています。

4行目でjQueryが無かった場合はノーマルなJavaScriptで属性設定するだとか、7行目のif文要らないんじゃないかとか思ったりしますが改善は後ほどということで…(いつだろうね!)

サイトに合ったコードに適宜変更してみて下さいませ。

本当はこっちの方法で解決したかった

上にあるコードよりも、本当はWordPressが用意しているフックを使って以下のように解決したかったんです。

/**
* RSSウィジェットのアンカータグにblank属性を追加
*/
function add_blank_attributes_anchor_tag_rss_widget() {
    if ( is_active_widget( false, false, 'rss' ) ) { // RSSウィジェットの状態判定
        if ( wp_script_is( 'jquery', 'done' ) ) {
        ?>
        <script type="text/javascript">
            (function($){
                $('a.rsswidget').click(function() {
                    if ($(this).attr('target') === undefined) {
                        $(this).attr('target', '_blank');
                    }
                });
            })(jQuery);
        </script>
        <?php
        }
    }
}
add_action( 'wp_print_footer_scripts', 'add_blank_attributes_anchor_tag_rss_widget' );

ただ、6行目のwp_script_is()に’done’(スクリプトが出力されているかの判定)を渡しても「wp_footer」や「wp_print_footer_scripts」のアクション時点でtrueが返って来ず…。諦めてJavaScriptでjQueryが読み込まれているかの判定を行いました。

参考: WP_Enqueue_Script Inline Script To Load After jQuery – Ideas and Pixels

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone