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 ] ) );
}