wp_nav_menu()が出力するliのclassにカテゴリー(ページ)スラッグを含める方法
-
初心者です。ご指導よろしくお願い致します。
過去のトピック「wp_list_categories()が出力するliのclassにカテゴリースラッグを含める方法」を応用して
wp_nav_menu()にも同じようにメニュー項目のカテゴリ(ページ)スラッグを、
liのclassに追加したいと考えています。
…が、トライしましたがphpの知識が乏しくうまくできませんでした。。。恥ずかしいですが初心者のあてずっぽうコードです。↓
<?php function my_nav_menu( $output, $args ) { if ( preg_match_all( '/menu-item-([0-9]+[^0-9])/', $output, $matches ) ) { foreach ( $matches[0] as $key => $match ) { $menu = wp_get_nav_menu_items( intval( $matches[1][$key] ) ); $output = preg_replace( '/' . $match . '/', esc_attr( $menu->attr_title ) . ' ' . $match, $output ); } } return $output; } add_filter( 'wp_nav_menu', 'my_nav_menu', 10, 2 ); ?>
思うに
$menu = wp_get_nav_menu_items( intval( $matches[1][$key] ) );
あたりがなんか違うのでは、、、と思っています。ご教授よろしくお願い致します。
(使用バージョン:3.0.2)
-
メニュー項目の編集時に[CSS class (オプション)]欄でクラス名を指定するのが楽です。
コードを書くのが好きなら、以下を functions.php に追加すれば OK。
add_filter( 'nav_menu_css_class', 'my_nav_menu_css_class', 10, 2 ); function my_nav_menu_css_class( $classes, $item ) { if ( 'page' == $item->object ) { $page = get_page_by_title( $item->title ); $classes[] = $page->post_name; } else if ( 'category' == $item->object ) { $cat = get_category( get_cat_ID ( $item->title ) ); $classes[] = $cat->slug; } return $classes; }
※タクソノミー,投稿タイプ,カスタムリンクなどには未対応です。
kzさん、お返事ありがとうございます。
ご提示いただいたコードで希望通りの表示ができました!
nav_menu_css_class というものがあったのですね、勉強になりました。
本当にありがとうございました。ところで、
メニュー項目の編集時に[CSS class (オプション)]欄でクラス名を指定するのが楽です。
とは、管理画面のメニューの画面にあるのでしょうか?
こちらでは確認できませんでしたが、見落としているのでしょうか、、、?
(wp3.0.2、管理者権限でログインしています。)コードは出来れば少なめが好きなので^^;、よろしければお教え頂ければと思います。
すみません、よろしくお願い致します。[メニューを追加]するとグレイなメニュー項目が追加されますね?
その右端に▼(下向き三角)があるのでクリックすると
[CSS class (オプション)]とかの入力欄が表示されます◎kzさん、何度もすみません、ありがとうございます。
グレーなメニュー項目の▼をクリックして開けたところには、
「ナビゲーションラベル」「タイトルの属性」の項目しかありません。。。ところが!
試しにテーマをデフォルトに変えたところ(オリジナルテーマを使用していました)、
「CSS class (オプション)」の項目が出てきました! Σ( ̄□ ̄)しかも!
そのままテーマをオリジナルに戻したところ、
「CSS class (オプション)」の項目が隠れること無く出ていました! ΣΣ( ̄□ ̄)なんだったのでしょう。。。?
とにかく今は問題無くクラス指定ができるようになりました。
長々とおつきあいいただき申し訳ございませんでした。
ありがとうございました!
- トピック「wp_nav_menu()が出力するliのclassにカテゴリー(ページ)スラッグを含める方法」には新たに返信することはできません。