テーマをゼロから作ってみる(12)です。今回は WordPress デフォルトのカスタムメニューのカスタマイズです。制作中のテーマのデモサイトがあります。CSS 等細部は未調整です。
- ゼロから作るWordPressテーマ(現在停止中)
01作成中のテーマのページ構成
ブログサイトです。目的としているサイトは映画のレビューサイトです。

現時点のサイト構成は、
- ホームページ(個別ページ, front_page.php)
- 投稿ページ(single.php)
- ブログページ(個別ページ, index.php)
- カテゴリーページ(index.php)
で、他に、おすすめ映画、よく読まれている記事、検索、お問い合わせの各ページを予定しています。
映画のレビューサイトですので、メニューは映画タイトルの五十音順カテゴリーになります。他に、ナビゲーションとして、ページ上部に検索アイコンを置き、ポップアップで検索フォームを出します。ページ下部には、ページトップへのスクロールアイコンとホームアイコンを置きます。
02メニューに Dashicons を使う
WordPress には Dashicons が導入されていますのでメニューアイコンとして利用します。通常は dashicons.min.css を読み込んで HTML か CSS で利用しますが、\wp-includes\fonts フォルダに SVG ファイルがありますのでそれを利用します。
Dashicons を SVG で使う方法は次の記事に書いています。
たとえば、カテゴリーアイコンを表示するには次のようにします。
で、これをメニューに使うには、メニュー項目のナビゲーションラベルに上の HTML を入れます。サイズやカラーは CSS で指定します。

ひとつの例ですが、次のように入力します。
- URL …… サブメニューをドロップダウンするためのメージ内リンク
- ナビゲーションラベル …… SVG の HTML
- タイトル属性 …… マウスを置くと「映画タイトル五十音順」と表示
- CSS class …… ひとつしか入りません
ところで、以前はこのナビゲーションラベルに HTML を入れますとエスケープされて文字列になってしまっていたんですが、今は HTML が入ります。あるいは私の勘違いかもしれませんが、その記事は次のページにあります。
03冗長なデフォルトの id, class を整理する
この設定で出力されるデフォルトのメニューには、次のように不必要な(人による…)id や class が山ほどついてきます。
これを整理カスタマイズします。
nav_menu_item_id
メニューリスト(<li></li>)の id をフィルタリングします。
4つまで引数を取ることが出来ます。デフォルトの id は、menu-item-ID となっていますが、いろいろ手を加えていますとメニュー ID は変わってしまいますのであまり汎用性がありません。削除してしまいましょう。次のようにします。例ですので4つの引数を取っていますが、必要な数だけとれば問題ありませんし、削除するだけなら引数は必要なく単に NULL(”)を返せば削除されます。
nav_menu_css_class
メニューリストの class をフィルタリングします。
これも同様に4つの引数を取ります。デフォルトでは数個のクラス名が付与されますが、今テーマの場合は、第1階層には menu-item、第2階層以下には sub-menu-item を付与しています。
$classes[0] にはメニュー設定で入力した CSS class(今回は menu-category)が入っています。入力されている場合にはそのクラスを残すようにしています。
nav_menu_link_attributes
メニューリストの下位のアンカーの属性をフィルタリングします。
同様に4つの引数を取ります。アンカー要素にクラス名などが必要な場合に使います。今回は classとともに id も追加しています。ドロップダウンメニューや検索のポップアップに Javascript を使いますので id があったほうが便利です。
id を付与している部分は、メニュー設定で入力した URL が内部リンクの場合はその文字列を取り出して id としています。
以上のフィルターをかけた結果次のようになりました。
04完成したメニューとナビゲーション
ということで、現在デモサイトは次の画像のようになっています。クリックしますとデモサイト(現在停止中)に飛びます。
なお、ここまで手を加えるのなら Walker_Nav_Menu クラスを継承上書きしたほうがいいかも知れません。
