WordPressに標準である、外部サイトなどの記事一覧を取得して表示するウィジェット「RSS」。
このRSSウィジェットが吐き出すリンク(アンカータグ)には設定から属性などが付けられません。外部サイトのリンクを表示している場合、新規タブで開くようにして欲しいという案件があったりするのではないでしょうか。
というわけでRSSウィジェットのアンカータグにtarget="_blank"
を追加するスニペットのメモです。
RSSウィジェットのアンカータグにblank属性を追加する
スニペットと言ってもちょっとやり方が下手かも知れません。以下のようにコードをfooter.phpのwp_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