ナビゲーションメニューバーにメニュー名だけではく、英語で書き添えしたりしているこれのやり方です。
メニューに説明文を入力する説明欄は、外観→メニューの表示オプションで、□説明 にチェックをつけると表示されるようになります。
すると、こんな感じで説明を入れられるようになります。
ただ、デフォルトでは説明はメモ扱いで、なにを入力しても表示はされません。 そこで、入力した説明をナビゲーションメニューに表示させる方法を。
の2つ、備忘録を兼ねて紹介します。
そもそも、ナビゲーションメニューが利用できるようになっている必要があります。 もし、利用できるようになっていなければ、次のコードをfunction.phpに入れます。
add_theme_support( 'menus' ); if ( function_exists( 'register_nav_menus' ) ) { register_nav_menus( array( 'header-menu' => 'Header Menu', ) ); }
で、header.phpに、
'header-menu', 'container' => '', 'menu_class' => 'nav', 'link_before' => '', 'link_after' => '', 'items_wrap' => '
と入れておきます。
次のコードをfunction.phpに入れます。
function prefix_nav_description( $item_output, $item, $depth, $args ) {
if ( !empty( $item->description ) ) {
$item_output = str_replace( '">' . $args->link_before . $item->title, '">' . $args->link_before . '' . $item->title . '' . '
' , $item_output );
}
return $item_output;
}
add_filter( 'walker_nav_menu_start_el', 'prefix_nav_description', 10, 4 );これで、メニュータイトルにタグで囲み、説目の部分はで囲まれて出力されるようになります。 なにやらごちゃごちゃやってますが、やっていることはシンプルで、str_replaceでもとの文字列からタグと説明付きの文字列に置換しているだけ。シンプルです。 参考にしたサイトさん:http://themefoundation.com/menu-item-descriptions/
もう一つの方法です。フィルターフックを使うのではなく、ナビゲーション・メニューを生成している関数をオーバーライドします。 オーバーライドというのは、プログラムそのものを一時的に上書きしてしまうんですが、まずは以下のコードをfunction.phpに追加します。
class description_walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= $indent . '
start_el関数が、ナビゲーション・メニューの文字列を生成している関数になってるので、それをそのまま上書きしてて、
$prepend = ''; $append = '';
の部分で、メニュータイトルをで囲んで、
$description = ! empty( $item->description ) ? ''.esc_attr( $item->description ).'' : '';
の部分で、タグで囲んだ説明文を作っています。 今度は、header.phpにあるナビゲーションメニューの出力部分を変えます。 で、header.phpに、
'header-menu', 'container' => '', 'menu_class' => 'nav', 'link_before' => '', 'link_after' => '', 'items_wrap' => '
となっているとしたら、arrayの部分に、 ‘walker’ => new description_walker()を追加します。
'header-menu', 'container' => '', 'menu_class' => 'nav', 'link_before' => '', 'link_after' => '', 'items_wrap' => '
これで、説明が追加されるはずです。 参考にしたサイトさん:http://www.kriesi.at/archives/improve-your-wordpress-navigation-menu-output
あとは、cssを当ててやればOK。
.nav { overflow: auto; float: right; width: 840px; padding: 0 ; } .nav ul, .nav li { list-style: none; } .nav .menu-item a { float: left; display: block; height: 80px; width: 150px; padding: 0 10px 0 0; text-align: center; line-height: 1.2; } .nav .menu-item a strong{ font-size: 1.05em; margin-top: 40px; margin-bottom: 0; padding: 0; display: block; } .nav .menu-item a span { display: block; font-size: 80%; color: red; }
.nav は、適宜変えてください。これで、説明付きのナビゲーションメニューになるはずです。
[Collab] Collab…