WordPress Snippet

ワードプレスをカスタマイズしよう

wp_nav_menu()にメニューがセットされているかどうかをチェックする

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

[emulsion_relate_posts]