サポート » テーマ » wp_nav_menu()が出力するliのclassにカテゴリー(ページ)スラッグを含める方法

  • 解決済 kxkx

    (@kxkx)


    初心者です。ご指導よろしくお願い致します。

    過去のトピック「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)

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • メニュー項目の編集時に[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 (オプション)」の項目が隠れること無く出ていました! ΣΣ( ̄□ ̄)

    なんだったのでしょう。。。?
    とにかく今は問題無くクラス指定ができるようになりました。
    長々とおつきあいいただき申し訳ございませんでした。
    ありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「wp_nav_menu()が出力するliのclassにカテゴリー(ページ)スラッグを含める方法」には新たに返信することはできません。