http://www.tenman.info/wp3/enough/(enough)というテーマで、レビュアーから教えてもらった関数
カスタマイズしたメニューをセットした場合と、何もセットしていない場合に使われる フォールバック関数のhttp://codex.wordpress.org/Function_Reference/wp_page_menu(wp_page_menu関数)で、出力するhtmlが異なるために、CSSがうまく適用できなくなっていた。
location(この場合はprimary)にメニューがセットされているか、いないか 条件分岐する方法は、以下の通り
<?php if ( has_nav_menu( 'primary' ) ) { echo 'set'; }else{ echo 'not set'; } ?>
http://codex.wordpress.org/Function_Reference/has_nav_menu(b:has_nav_menu)
知らないという事は、とても不幸な事で、改めて思った。
ほとんどの方法は、すでに準備されている
私は、以下のようにコードを記述していた。
functions.php
/** * * * * * since 0.37 */ function enough_nav_menu_title( $theme_location ) { $title= ''; if ( $theme_location && ( $locations= get_nav_menu_locations() ) && isset( $locations[ $theme_location ] ) ) { $menu= wp_get_nav_menu_object( $locations[ $theme_location ] ); if( $menu && $menu->name ) { $title= $menu->name; } } return apply_filters( 'enough_nav_menu_title', $title, $theme_location ); }
index.php
<?php if( enough_nav_menu_title('primary')== '' ){ $args= array( 'menu_class'=> 'menu-header' , 'theme_location'=> 'primary' , 'container_class'=>'menu-header' , 'echo'=> true ); wp_nav_menu($args); }else{ $args= array( 'theme_location'=> 'primary' , 'container_class'=>'menu-header' , 'echo'=> true ); wp_nav_menu($args); } ?>
wp-includes/nav-menu.php
/** * Whether a registered nav menu location has a menu assigned to it. * * @since 3.0.0 * @param string $location Menu location identifier. * @return bool Whether location has a menu. */ function has_nav_menu( $location ) { $locations= get_nav_menu_locations(); return ( ! empty( $locations[ $location ] ) ); }