functions.phpを作成
register_nav_menus()でメニューを登録
add_action(‘init’, ”)で
wp_nav_menu() でメニューを表示
register_nav_menus()
で登録したメニューを、実際にテーマのテンプレートに表示するには、wp_nav_menu()
関数を使用します。
WordPress のテーマでカスタムメニューを作成し、管理画面から自由にメニュー項目を編集できるようにするための関数です。この関数を使うことで、テーマの様々な場所に、複数のナビゲーションメニューを配置することができます。
//使い方
//functions.php
// メニューの登録
function my_menu_init() { register_nav_menus( array( 'global_nav' => 'ヘッダーメニュー', 'drawer_nav' => 'ドロワーメニュー', 'footer_nav' => 'フッターメニュー', ) //配列は好きな方を使う [ 'global_nav' => 'グローバルナビゲーション', ] );
}
add_action('init', 'my_menu_init');
array(): メニューの位置を配列で指定します。
‘global_nav’,‘footer_nav’: メニューの位置を識別する名前(スラッグ)です。この名前は、テーマ内でメニューを呼び出す際に使用します。
‘ヘッダーメニュー’: 管理画面に表示されるメニューの説明です。
上の例では、global_nav
と drawer_nav
、footer_nav
、という3つのメニュー位置を登録しています。これにより、管理画面の「外観」→「メニュー」で、「global_nav
」と「drawer_nav
」「footer_nav
」という名前のメニューを作成し、それぞれをテーマのヘッダーとフッターに表示することができます。
register_nav_menus()
で登録したメニューを、実際にテーマのテンプレートに表示するには、wp_nav_menu()
関数を使用します。
<?php wp_nav_menu( array( 'theme_location' => 'global_nav' ) ); ?>
htmlの中で呼び出すために少し細かい設定を行います。
<?php $menu_name = 'global_nav'; // functions.phpで指定したやつ $locations = get_nav_menu_locations(); $menu = wp_get_nav_menu_object($locations[$menu_name]); $menu_items = wp_get_nav_menu_items($menu->term_id); ?> <?php foreach ($menu_items as $item): ?> <li class="nav-item"> <a class="nav-link" href="<?php echo esc_attr($item->url); ?>"> <?php echo esc_html($item->title); ?> </a> <!-- データベースのないようを出力するときはescをつけて出力 --> </li> <?php endforeach; ?>