MENU

wp_nav_menu()

wp_nav_menu() は、WordPressのナビゲーションメニューを表示するテンプレートタグです。管理画面で登録したメニューを、テーマの任意の場所に配置するために使います。

目次

機能の説明

wp_nav_menu() は、管理画面から作成したメニューをHTML形式で出力するテンプレートタグです。例えば、ヘッダーやフッターにメニューを表示したいときに使います。

シンプルなコード例

<?php wp_nav_menu(['theme_location' => 'primary']); ?>

このコードは、theme_location で指定した「primary」メニューを表示します。

使い方の解説

wp_nav_menu() を使うためには、まずWordPressの管理画面でメニューを作成し、それをテーマの「メニューの位置」に割り当てる必要があります。さらに、functions.php でその位置を登録することも推奨されます。

wp_nav_menu(array $args = []);
  • theme_location: メニューを表示する位置を指定。
  • menu: 特定のメニュー名やIDを指定して表示。
  • container: メニューを包むHTML要素。デフォルトは<div>
  • menu_class: メニューに付与するCSSクラス名。
  • fallback_cb: メニューが見つからない場合に実行するコールバック関数。

使用例

<?php 
wp_nav_menu([
    'theme_location' => 'primary',
    'container' => 'nav',
    'container_class' => 'main-navigation',
    'menu_class' => 'nav-list',
    'fallback_cb' => false
]);
?>

このコードは、primary という位置に登録されたメニューを<nav>タグ内に表示します。また、メニューが設定されていない場合は何も出力しません。

一緒に使うことが多い関連タグ

register_nav_menus()

このタグは、テーマで使用するナビゲーションメニューの位置を登録するために使います。

<?php 
function register_my_menus() {
    register_nav_menus([
        'primary' => 'メインメニュー',
        'footer'  => 'フッターメニュー'
    ]);
}
add_action('after_setup_theme', 'register_my_menus');
?>

このコードは、「メインメニュー」と「フッターメニュー」の2つのメニュー位置を登録します。

has_nav_menu()

このタグは、指定した位置にメニューが登録されているかを確認するために使います。

<?php 
if (has_nav_menu('primary')) {
    wp_nav_menu(['theme_location' => 'primary']);
} else {
    echo '<p>メニューが設定されていません。</p>';
}
?>

このコードでは、primary 位置にメニューが登録されている場合にそのメニューを表示し、登録されていない場合はメッセージを出力します。

追加情報を取得したい場合

ナビゲーションメニューのカスタムリンクやクラスを動的に追加したい場合、wp_nav_menuwalker オプションを使います。

wp_get_nav_menu_items()でメニュー項目を取得

<?php 
$menu_items = wp_get_nav_menu_items('primary');
foreach ($menu_items as $item) {
    echo $item->title . ' (' . $item->url . ')<br>';
}
?>

このコードでは、primary メニューの全項目を取得し、それぞれのタイトルとURLを表示します。

出力できる情報

  • title:メニュー項目のタイトル
  • url:メニュー項目のURL
  • menu_item_parent:親メニュー項目のID
  • ID:メニュー項目のID

想定されるトラブル

メニューが表示されない

theme_location に割り当てられたメニューが存在しない。

解決方法

WordPress管理画面でメニューを作成し、該当の位置に割り当ててください。

カスタム投稿タイプのリンクがうまく表示されない

カスタム投稿タイプがパーマリンク設定に反映されていない可能性があります。

解決方法

設定 → パーマリンクから「変更を保存」をクリックしてパーマリンクを再生成します。

CSSが反映されない

メニューに適用するクラス名が正しく設定されていない可能性があります。

解決方法

menu_classcontainer_class に指定したクラス名がCSSで定義されているか確認してください。

Q&A

メニューにカスタムクラスを追加するには?

wp_nav_menu()menu_class オプションでクラスを指定します。

wp_nav_menu(['menu_class' => 'custom-menu-class']);

メニューに特定のIDを持つ項目を含めたい場合は?

wp_get_nav_menu_items() で取得した項目をループで確認し、特定のIDに一致する項目だけを表示します。

子メニューを展開するメニューはどう実装しますか?

wp_nav_menu() で出力されるHTMLにCSSとJavaScriptを追加して、ホバーやクリックで子メニューが展開されるようにします。

まとめ

wp_nav_menu() は、WordPressでナビゲーションメニューを表示するための基本的なテンプレートタグです。

register_nav_menus()has_nav_menu() などの関連タグと組み合わせて使用することで、テーマのヘッダーやフッターに柔軟なメニューを実装できます。カスタムCSSやJavaScriptを使ってスタイルや動作を自由に拡張できるため、非常に汎用性の高いタグです。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

This site uses Akismet to reduce spam. Learn how your comment data is processed.

目次