Wordpressのメニューにページ内リンクを混入(株)オルテナジーの社内情報共有と動作確認のついでのブログです。Wordpress明示的に除外しない限りだいたい全ページについてくる共通メニューのカスタマイズメモ。使っているテンプレートが縦スクロールでセクションを並べるタイプだったので、トップページだけはページを読み直しせずにページ内リンクの移動になるようにしたかったのです。他のページからは、アンカー付きでトップページへリンクしてくれないと困ります。メニューを書き出しているのは、Walker_Nav_Menuクラス。前のWPだと、wp-includes/nav-menu-template.phpにありました。このクラスを継承してメニューを作って、必要なところだけ書き換えます。いつもの、functions.phpに、Walker_Nav_Menuを継承したクラスを追加しました。Walker_Nav_Menu{}元のWalker_Nav_Menuクラスにはいくつか要素がありますが、star_el関数に、リンクのhtmlタグの内容があります。カスタマイズすべきはここだけなので、とりあえず、まずはstar_el関数を、丸ごとMy_Walker_Nav_Menuに持ってきました。);}}ソースの中に、それっぽい一行が。入った値がそのまま、リンクURLになるようです。いうわけで、その手前に追記。リンクのURLが#ではじまるときに、Wordpressのホームページではそのままアンカーへ(ページ内リンク)、他の時はトップページへのリンクにアンカーをつけたものにします。url;}}最終的には、こうなりました。黄色いところ以外は元のWalker_Nav_Menuクラスからのコピペなので、実際に使っているWPのものを使ってください。メニューは、ページ内リンクはカスタムリンクで#で始まるものにします。href=”#latestnews”>などアンカーが埋め込まれてあればそれを。href=”#アンカー”>で自分で作成したものを。#で始まるようにします。テンプレート内のWalker_Nav_Menuを表示している場所を、作成したMy_Walker_Nav_Menuに置き換えます。header.phpです。ソースコードを「Walker_Nav_Menu」でテキスト検索して、「My_Walker_Nav_Menu」に置き換えます。使ってるテンプレートだと、こんな感じです。My_Walker_Nav_Menu));?>「My_Walker_Nav_Menu」になっていますが、元は「Walker_Nav_Menu」でした。実際に動いているサイトが、こちらです。http://kohuku.jp/(サンドイッチを食べて、野菜を買って家で野菜を食べてね!)ところで、トップページがとうとうブログだけになりました。ボスはエネリークスに旅立ちました。http://eneleaks.com/Satokoが、弊社本体のスタッフブログで紹介されていたので、本人に内緒でこっそりリンクを貼ります。(15)完全に文系です。(10)冷たいジャスミン茶がマイブームです。