……というようなリクエストがあったので、やってみました。「リンク」メニューで作る場合は target 属性などを設定できるのに、カスタムメニューだとそれがないからです。
[2012.4.9追記]
……という前振り完全にウソウソ大ウソごめんなさい。
カスタムメニューの「表示オプション」を見てみたら設定項目が!続きはこちら。
以下の方法は「こんな方法もあるよ」程度に参考にしてください(陳謝)。
解法は
- (おそらくあると思われる)フィルターフックを利用する
- jQueryの attr メソッドを使う
のいずれかかなーと思ったので、今までやったことのない 1. でチャレンジ。
出力されたHTMLタグからアタリをつけてgrepしたところ、カスタムリンクは /wp-includes/nav-menu-template.php で出力されてることが判明。で、ソースを見てみるとやっぱりありますフィルターフックが。
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
リンクを出力する際に apply_filters で待ち受けしていることがわかったので walker_nav_menu_start_el をフックするスクリプトを書いてみました。
function my_add_href_atts( $content ) { $host = $_SERVER['HTTP_HOST']; if ( !preg_match( "/$host/", $content ) ) { $content = preg_replace( "/(href=\".+?\")/", "$1 target=\"_blank\"", $content ); } return $content; } add_filter( 'walker_nav_menu_start_el', 'my_add_href_atts' );
置換文字列を書き換えれば target 属性の代わりに rel 属性とかまあいろいろ追記できますね。
コメントを残す