Nakkan Base

ナビゲーションメニュー投稿記事一覧

日別の投稿記事一覧

メニューの表示は、register_nav_menu()を使う

結論から言えば、「add_theme_support( ‘menus’ );」は必要ないという話。

そうじゃなくて、「register_nav_menu()」を使いなさいということ。

この際、複数のメニューを設定するのだと、「register_nav_menus()」となる…のだが、白状すると私、これができなかった(汗)。

一応書いておくと、

register_nav_menus( array(
	'menu-a' => 'メニューA',
	'menu-b' => 'メニューB',
) );

と、すこぶる簡単なことなのですが……なぜかこれがエラーになるので、よくわからないまま次のようにfunctions.phpに書き込んだら正常に表示されました。

=functions.php=

function new_setup_theme()
{
  register_nav_menu('main-nav', 'メインナビゲーション');
  register_nav_menu('side-nav', 'サイドナビゲーション');
}

add_action('after_setup_theme', 'new_setup_theme');

=nav.php=

 <nav id="mainNav">
      <div>
        <?php wp_nav_menu( array( 'theme_location' => 'main-nav' )); ?>
    </div>
  </nav>

メニューとウィジェットを表示させる

メニューとウィジェットって、混同しやすいのは私だけ?

冷静に考えれば全然別物だけど、それらをサイト表示させる時のコードを比較の意味でこの1ページに書いておこうと思う。

ファイルは、home.phpとかfront-page.phpとかtop.phpとかindex.phpになると思いますが、その時それぞれで。

=メニューの場合(下はサイドバー表示の場合)=

<aside class="sidebar">

      <?php register_nav_menu( 'side-nav', 'サイドナビゲーション', ); ?>

      <?php wp_nav_menu( array( 'theme_location' => 'side-nav' ) ); ?>
   
</aside>

=ウィジェットの場合=

<div class="sidebar">
  <?php
  if (is_active_sidebar('sidebarのID')) :
    dynamic_sidebar('sidebarのID');
  else :
  ?>
    <div class="widget">
      <h2>No Widget</h2>
      <p>ウィジットは設定されていません。</p>
    </div>
  <?php endif; ?>
</div>

これを混同して、ウィジェット表記の場所にメニュー表記をしてしまい、メニュー以外のウィジェットが表記されず「????」ってなっていたのであった。