WordPressのデフォルトのメニュークラスはとても便利です。しかし、時々私が遭遇する問題の一つは、メニューの副項目としてのカテゴリーにあります。たとえば、次のようなメニュー構造があります。
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' );
https://codex.wordpress.org/Class_Reference/Walker を使用できます。アクティブな親を検出したい場合は使用できます。
if ( in_array( 'current-menu-ancestor', $classes) ) {
$class_names .= ' is-active';
}
これはおそらくあなたが探しているものです..
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;
}
それはクラスを 現在の投稿の祖先 メニューアイテムの親に追加します。私は私のテーマでこれを試してみました、そしてそれは完全に働いています。