カスタムメニューの「カスタムリンク」に target 属性を追記

……というようなリクエストがあったので、やってみました。「リンク」メニューで作る場合は target 属性などを設定できるのに、カスタムメニューだとそれがないからです。

[2012.4.9追記]
……という前振り完全にウソウソ大ウソごめんなさい。
カスタムメニューの「表示オプション」を見てみたら設定項目が!続きはこちら

以下の方法は「こんな方法もあるよ」程度に参考にしてください(陳謝)。

解法は

  1. (おそらくあると思われる)フィルターフックを利用する
  2. 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 属性とかまあいろいろ追記できますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です