メニューの登録

テーマの functions.php で、メニューを登録する必要があります。これにより、外観 -
メニュー
に表示される名前が設定されます。

まず、register_nav_menus() を使用してメニューを登録します。

この例では、「管理場所」タブに「ヘッダーメニュー」と「エクストラメニュー」の2つの場所が追加されます。

  1. function register_my_menus() {
  2. register_nav_menus(
  3. array(
  4. 'header-menu' => __( 'Header Menu' ),
  5. 'extra-menu' => __( 'Extra Menu' )
  6. )
  7. );
  8. }
  9. add_action( 'init', 'register_my_menus' );

メニューの表示

メニューを登録したら、wp_nav_menu() を使用して、テーマにどこに表示するかを指示する必要があります。たとえば、上記で登録したヘッダーメニューを表示するために、header.php ファイルに次のコードを追加します。

  1. wp_nav_menu( array( 'theme_location' => 'header-menu' ) );

パラメーターの完全なリストは、関数リファレンスの wp_nav_menu() ページにあります。

表示したい追加のメニューについても、このプロセスを繰り返します。オプションで、CSS でメニューをスタイル設定できるコンテナクラスを追加できます。

  1. wp_nav_menu(
  2. array(
  3. 'theme_location' => 'extra-menu',
  4. 'container_class' => 'my_extra_menu_class'
  5. )
  6. );

CSS クラスの完全なリストは、関数リファレンスの wp_nav_menu() ページにあります。これを使用してメニューをスタイル設定できます。

追加コンテンツの表示

以下は、メニュー項目ラベルテキストの前後に span 要素を表示する、Twenty Seventeen フッターソーシャルメニューの簡略版です。

  1. wp_nav_menu(
  2. array(
  3. 'menu' => 'primary',
  4. 'link_before' => '<span class="screen-reader-text">',
  5. 'link_after' => '</span>',
  6. )
  7. );

出力は次のように表示されます…

[html]

\u0026lt;div class=\u0026#34;menu-social-container\u0026#34;\u0026gt;

\u0026lt;ul id=\u0026#34;menu-social\u0026#34;\u0026gt;

\u0026lt;li id=\u0026#34;menu-item-1\u0026#34;\u0026gt;

\u0026lt;a href=\u0026#34;http://twitter.com/\\u0026#34;\\u0026gt;\\u0026lt;span class=\u0026#34;screen-reader-text\u0026#34;\u0026gt;Twitter\u0026lt;/span\u0026gt;

\u0026lt;/li\u0026gt;

\u0026lt;/ul\u0026gt;

\u0026lt;/div\u0026gt;

[/html]

各メニュー項目の <li><a> 要素の間にテキストを表示するには、beforeafter パラメーターを使用します。

コールバックの定義

デフォルトでは、指定されたメニューまたは場所が見つからない場合、WordPress は最初の非空メニューを表示するか、カスタムメニューが選択されていない場合はページメニューを生成します。これを防ぐには、theme_locationfallback_cb パラメーターを使用します。

  1. wp_nav_menu(
  2. array(
  3. 'menu' => 'primary',
  4. // do not fall back to first non-empty menu
  5. 'theme_location' => '__no_such_location',
  6. // do not fall back to wp_page_menu()
  7. 'fallback_cb' => false
  8. )
  9. );