web-dev-qa-db-ja.com

現在の祖先の親メニュー項目を強調表示する

WordPressのデフォルトのメニュークラスはとても便利です。しかし、時々私が遭遇する問題の一つは、メニューの副項目としてのカテゴリーにあります。たとえば、次のようなメニュー構造があります。

  • ページ1
  • 2ページ
    • カテゴリー1
  • 3ページ

Category 1がアクティブなとき、Page 2.current-menu-ancestorを取得しますが、Category 1の投稿が表示されるとすぐにPage 2には特定のクラスがありません…しかしCategory 1には.current-menu-ancestorがあります。

それでは最後に質問です:これらの.current-post-ancestorの両親にクラスをどのように割り当てますか?

私はPHP解決策を探しています。 Javascript/jQueryは非常に明確です…ここに私がやりたいことをよりよく理解するためのjQueryソリューションがあります(そして同じ問題を抱えていてJSソリューションに満足している人のために):

jQuery( 'li.current-post-ancestor' ).parents( 'li.menu-item' ).addClass( 'current-menu-ancestor' );
1
GDY

https://codex.wordpress.org/Class_Reference/Walker を使用できます。アクティブな親を検出したい場合は使用できます。

if ( in_array( 'current-menu-ancestor', $classes) ) {
    $class_names .= ' is-active';
}
1
mcgoo

これはおそらくあなたが探しているものです..

add_filter( 'wp_nav_menu_objects', 'add_menu_parent_class' );
function add_menu_parent_class( $items ) {

    $parents = array();
    foreach ( $items as $item ) {
        if ( in_array('current-post-ancestor', $item->classes)  ) {
            $parents[] = $item->menu_item_parent;
        }
    }

    foreach ( $items as $item ) {
        if ( in_array( $item->ID, $parents ) ) {
            $item->classes[] = 'current-menu-ancestor'; 
        }
    }

    return $items;    
}

それはクラスを 現在の投稿の祖先 メニューアイテムの親に追加します。私は私のテーマでこれを試してみました、そしてそれは完全に働いています。

0
Raitul Islam