ウェブデザインのヒント F*stream一見さんのコメント歓迎

wp_nav_menu の li に任意の id をつけたい

Post to Google Buzz
このエントリーをはてなブックマークに追加
はてなブックマーク - wp_nav_menu の li に任意の id をつけたい
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip

備忘録的に。

グローバルメニューのliに枝番のついたidを振る、なんて普通によくあるニーズだと思うのですけど、なぜか WordPress はデフォルトでは対応していないみたいなんですよね。(ですよね?)

何もしなくても自動で id & class はつくのですけど、脈絡不明の番号とかにされて不便なので、なんとか function.php あたりで任意の名前を指定できないもんかと思って探してみました。

ぐぐっても英語ばっかりでいちいち読むのに時間がかかるので日本語でメモっときます(;´Д`)<英語やんなきゃ…

Add an ID to each LI in wp_nav_menu
http://wpquestions.com/question/show/id/2880

このページに載ってるのがそれっぽいので使ってみました。
で、すんなり動かなかったのでこの後ちょっと改造してます。

まず最初にやったことは、これ↓をfunction.phpにまんまコピペ。(しかし動かず)

$menu_counter = 0; 
add_filter('nav_menu_item_id','change_nav_menu_id',10,2); 
function change_nav_menu_id($current_id,$item_details){ 
global $menu_counter; return 'item-' .$menu_counter; 
}

わたしの読解が間違ってなければ、 5行目の item- って書いてあるところを任意の名前にすればOK、のはず。
$menu_counter っていうので要素に連番を振れる、はず。
このまま使えば、最初のアイテムには1がつく(item-1)、はず。

なのだけど、item- は表示されるものの、枝番が連番にならずに全部0になってしまいました。うーむ。

で、当てずっぽうで改造してとりあえず動くようにしました。改造後のコードがこれ

$menu_counter = 1; 
add_filter('nav_menu_item_id','change_nav_menu_id',10,2); 
function change_nav_menu_id($current_id,$item_details){ 
global $menu_counter; return 'item-' .$menu_counter++; 
}

最後5行目の $menu_counter の後ろに ++ (1を加算する代入演算子) をつけました。 でもそれだけだと、連番は機能したものの item-0から始まってしまったので、1行目の $menu_counter = 0; を 1 に変更して、枝番が1から始まるようにしました。

これでスッキリ解決。(一応)

わたし php 全然わかんないので完全に当てずっぽうです。 もし心やさしいPHPerさんがこの記事をご覧になったら、正解をお知らせいただけるととても嬉しいです。

それと、上記のサイトに書かれていたところによれば、この5行目を以下に変更すると、

return $item_details->post_name;

ページのスラッグ名をidにすることができる!はず(?)なんですけども、こちらも動きませんでした。なぜなの…。
こちらは何もしていない時と同じように自動でidが振られるだけで、うんともすんとも言わないです。

時間できたらこっちも解決方法を探してみますけども、連番でやりたいという目的が達成されたので、今日のところはとりあえずこれでヨシということにします。

2012-09-13 カテゴリー:その他 Comments (0) | Trackbacks (0)