WordPressでナビゲーションメニューをページごとにカレント表示する
ナビゲーションメニューのカレント表示、静的ページだとページごとに記述を変えるのは大変ですが、PHPでやってみたら簡単でした!
こんな感じにしたい
今いるページのナビはオレンジっぽく、下向きに▽を出して。他のページのナビは青で、下線つき。マウスオーバーで下線の色が変わる感じで。今回、閲覧対象が古いPCが多くIE6にも対応させなきゃならなかったので画像はjpgで、透過とか考えずにシンプルに作りました。
通常、hover、current画像の用意
PhotoShopで上記のような画像を作ります。(灰色の枠は見やすくするためのガイドです。)文字と▽に1pxのドロップシャドウをうすーくかけてあります。
こんな感じのHTMLを出力したい
<ul id="navi"> <li id="home" class="current"><a href="/">HOME</a></li> <li id="contents"><a href="contents/">CONTENTS</a></li> <li id="blog"><a href="blog/">BLOG</a></li> </ul>
現在のページにclass=“current”
が入ることで、CSS側で表示を変えてあげます。
PHPで書く
<ul id="navi"> <li id="home"<?php if (is_home()): ?> class="current"<?php endif; ?>><a href="<?php bloginfo('url'); ?>">HOME</a></li> <li id="contents"<?php if (is_page('contents')): ?> class="current"<?php endif; ?>><a href="contents">CONTENTS</a></li> <li id="blog"<?php if (is_page('blog') or is_single()): ?> class="current"<?php endif; ?>><a href="blog">BLOG</a></li> </ul>
こちらのサイトを参考にさせて頂いています。
vicuna CMSのグローバルナビのカスタマイズ -tpexbloghttp://tpexweb.info/blog/wordpress/vicuna_cms_globalnavi.php
li
タグの中に、特定のページならばclass=“current”
が入るようになっています。
こちらは、WordPressで普通のWebサイトをつくる場合の例です。home.phpを用意してあるのでそちらがトップページになります。ブログは、blogというスラッグの固定ページを作り、blog.phpという固定ページ用のテンプレートを作ってあげます。
また、ブログは、トップページと個別投稿ページ(シングルページ)全てにカレント表示させたいので、
<?php if (is_page('blog') or is_single()): ?>
のように記述しています。
追記と訂正
上記の記事にも追記してありますが、もっと簡単な方法を教えてもらえました!
こちらに詳しく書きましたのでご参照ください。この方法だとトップページがis_front_page()
で、ブログに設定した固定ページがis_home()
で条件分岐できるので、
<ul id="navi"> <li id="home"<?php if (is_front_page()): ?> class="current"<?php endif; ?>><a href="<?php bloginfo('url'); ?>">HOME</a></li> <li id="contents"<?php if (is_page('contents')): ?> class="current"<?php endif; ?>><a href="contents">CONTENTS</a></li> <li id="blog"<?php if (is_home() or is_single()): ?> class="current"<?php endif; ?>><a href="blog">BLOG</a></li> </ul>
このように書けば良いと思います!
CSSで実装
ul#navi, ul#navi li, ul#navi li a{ display:block; margin-top:3px; zoom:1; height:48px; } ul#navi li{ float:left; /*横並びに*/ width:90px; padding-left:10px; } ul#navi li a{ text-indent: 100%; /*テキストを見えなくする*/ white-space: nowrap; overflow: hidden; } /*各画像セット*/ ul#navi li#home a{background: url(images/home.jpg);} ul#navi li#contents a{background: url(images/contents.jpg);} ul#navi li#blog a{background: url(images/blog.jpg);} /*マウスオーバー時*/ ul#navi li#home a:hover, ul#navi li#contents a:hover, ul#navi li#blog a:hover{ background-position:0 -48px; /*真ん中の画像を出す*/ } /*カレント表示*/ ul#navi li#home.current a, ul#navi li#contents.current a, ul#navi li#blog.current a{ background-position:0 -96px; /*一番下の画像を出す*/ }
背景に縦48*3=114pxの画像を使い、状況によって48px又は96pxずらすという手法です。
テキストの画像じゃなくても、twitterなどのアイコンを色違いで用意しておいて、なんてこともできますね。このサイトの右上のアイコン類はそれでやっています。
こんな感じです。
2012/9/25追記
固定ページのスラッグを取得してナビゲーションを実装するという方法も書いてみました!
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。