説明
has_nav_menu() は、指定した位置(ロケーション)にメニューが割り当てられているかを判定する関数です。
基本構文
has_nav_menu( string $location ): bool
引数
$location:ロケーション名
戻り値
割り当てられていれば true。
使い方(サンプル)
if ( has_nav_menu( 'header' ) ) {
wp_nav_menu( array( 'theme_location' => 'header' ) );
}
注意点
- メニューが空でも、割り当て済みなら
trueになります。
実務での使いどころ
- メニューが割り当てられているときだけ、メニューの枠を出すとき。
- メニューがないときに、代わりの表示に、切り替えるとき。
よくあるミスと対処
- 登録されているかではなく、割り当てられているかを、判定する。
register_nav_menus()しただけでは、false。 - 場所のキーを、間違えている。
wp_nav_menu()の中の、fallback_cbだけで、枠まで制御しようとしている。枠の出力は、この関数で、先に判定する。
NG例
echo '<nav class="global">';
wp_nav_menu( array( 'theme_location' => 'header' ) );
echo '</nav>'; // メニューがなくても、枠が出る
OK例
if ( has_nav_menu( 'header' ) ) {
echo '<nav class="global">';
wp_nav_menu( array( 'theme_location' => 'header', 'container' => false ) );
echo '</nav>';
}
使い分け早見表
| 関数 | 役割 |
|---|---|
has_nav_menu() |
場所に、メニューが割り当てられているかを確認する |
register_nav_menus() |
メニューの場所を、登録する |
wp_nav_menu() |
メニューを出力する |
関連項目
wp_nav_menu()、register_nav_menus()
公式リファレンス:has_nav_menu() | Function | WordPress Developer Resources

コメント