WordPressサイトには、グローバルナビというメインメニューがあるものも多いです。
当サイトで言えば、以下の部分がグローバルナビ。
このグローバルナビとなるHTMLをPHPで出力するだけならば、比較的簡単です。
けれど、グローバルナビのサブメニューなどを一般的なメニュー形式で表示させるのには、ちょっとしたCSSを書くコツが必要です。
このCSSの書き方は、自分でもすぐに忘れてしまうので、今回はメモがてら「グローバルナビの実装方法」を書き記しておこうと思います。
今回実装するのは、以下のようなFlexbox形式のメニューです。
マウスカーソルを乗せると、サブメニューが表示され、一般的なリストダウンメニューライクに動作します。
目次
グローバルナビを実装する主な手順
WordPressにグローバルナビを実装する主な手順は以下です。
- functions.phpにメニューを登録するためのコードを書く
- テンプレートファイルにメニュー呼び出し用のコードを書く
- style.cssに表示を整えるスタイルを書く
グローバルナビ動作の詳細に拘るわけではなければ、3回のコピペで実装することができます。
functions.phpにメニューを登録するためのコードを書く
まずは、テーマに対してカスタムメニューを追加するためのコードをfunctions.phpに記入します。
// カスタムメニューの「場所」を設定 register_nav_menu( 'header-navi', 'ヘッダーナビ' );
このコードが追加されたことにより、Wordpress管理画面の「外観」→「メニュー」に「位置の管理」タブが表示され、「ヘッダーナビ」項目が追加されます。
テンプレートファイルにメニュー呼び出し用のコードを書く
次に、テンプレートファイルのグローバルナビを表示させたい部分に以下のコードを貼り付けます。
<!-- Navigation --> <nav id="navi" class="navi" role="navigation" itemscope itemtype="http://schema.org/SiteNavigationElement"> <div id="navi-in" class="navi-in"> <?php wp_nav_menu( array ( //カスタムメニュー名 'theme_location' => 'header-navi', //コンテナを表示しない 'container' => false, //カスタムメニューを設定しない際に固定ページでメニューを作成しない 'fallback_cb' => false, //出力されるulに対してidやclassを表示しない 'items_wrap' => '<ul>%3$s</ul>', ) ); ?> </div><!-- /#navi-in --> </nav> <!-- /Navigation -->
大抵のテーマであれば、グローバルナビはheader.phpに記載されているケースが多いです。
style.cssに表示を整えるスタイルを書く
上記までの編集では、グローバルナビは以下のようなリスト形式で表示されます。
これに対して、style.cssでCSSを書いてリストダウンメニュー形式となるように、表示を整えます。
/************************************ ** グローバルメニュー ************************************/ .navi-in{ /*幅を整える場合はwidthを設定する*/ /*width: 1000px;*/ } .navi-in > ul { padding: 0; list-style: none; display: flex; flex-wrap: wrap; justify-content: center; text-align: center; } .navi-in > ul li { display: block; width: 176px; height: 50px; line-height: 50px; } .navi-in > ul li:hover > ul { display: block; } /*サブメニュー*/ .navi-in > ul .sub-menu { display: none; position: absolute; margin-left: 0; min-width: 240px; list-style: none; padding-left: 0; background-color: #fafafa; z-index: 99; text-align: left; } .navi-in > ul .sub-menu li { width: auto; } .navi-in > ul .sub-menu a { padding-left: 16px; padding-right: 16px; } /*サブメニューのサブメニュー*/ .navi-in > ul .sub-menu ul { top: -50px; left: 240px; position: relative; } .navi-in a { color: #333; text-decoration: none; display: block; font-size: 16px; } .navi-in a:hover { background-color: #f3f3f3; transition: all 0.3s ease 0s; } .navi-in a:hover > ul { display: block; }
動作確認
単に上記のコード編集をしただけでは、以下のように表示されて、グローバルナビは表示されません。
これは、テンプレートファイルでwp_nav_menu関数を利用した際に、「カスタムメニューが設定されていないとメニューを表示しない設定」になっているからです。
グローバルナビを表示させ、動作確認をするには、カスタムメニューを作成する必要があります。
WordPress管理画面の「メニュー」項目を開いて、カスタムメニューを作成してください。
メニューを作成したら「位置の管理」タブを選択し、「ヘッダーナビ」に対して、「作成したメニュー」を選択してください。
上記のように、カスタムメニューを設定すると、以下のようにグローバルメニューが表示されます。
グローバルメニューが表示され、サブメニューもリストダウン形式で表示されるようになりました。
まとめ
今回紹介した方法で、簡素なグローバルメニューを作成することが可能です。
グローバルメニューの実装で、個人的に一番面倒なのは、CSSでのリストダウンメニューの実装です。今回サンプルとして書いたCSSさえあれば、ある程度リストダウン形式のメニュー実装方法は分かるかと思います。
というか、自分が覚えられないので、備忘録として書いたみたいなもんです。このメニューCSSを1から思い出しながら書くには、かなり時間を浪費するもので。