wake-up-neo.net

Klasse zum aktiven Element und seinem übergeordneten Element im Navigationsmenü hinzufügen

Ich benutze den folgenden Code, um dem aktuellen Menüpunkt einen Klassennamen "active" hinzuzufügen:

add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );

function add_active_class($classes, $item) {
  if( $item->menu_item_parent == 0 && in_array('current-menu-item', $classes) ) {
    $classes[] = "active";
  }

  return $classes;
}

Dies funktioniert als Charm, aber nur für Elemente ohne Dropdown. Wenn ein Element mit untergeordneten Elementen vorhanden ist, wird die aktive Klasse nicht zum übergeordneten Element hinzugefügt.

Gibt es eine Möglichkeit, diesen Code so zu ändern, dass der Filter eine "aktive" Klasse sowohl zum aktuellen Link als auch zum übergeordneten Link hinzufügt?

2
Johann

Je nachdem, welchen Kontext Sie benötigen und welchen Code Sie verwenden, können Sie Folgendes versuchen:

add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );

function add_active_class($classes, $item) {
  $class_names = array( 'current-menu-item', 'current-menu-ancestor', 'current-menu-parent', 'current_page_parent',  'current_page_ancestor' );

  if( $item->menu_item_parent == 0 && in_array( $class_names, $classes) ) {
    $classes[] = "active";
  }

  return $classes;
}

UPDATE: Wenn das obige wegen des Arrays als Nadel für die Funktion in_array aufgrund der PHP -Version nicht funktioniert, versuchen Sie es mit folgendem Code:

add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );

function add_active_class($classes, $item) {

  if( $item->menu_item_parent == 0 && 
    in_array( 'current-menu-item', $classes ) ||
    in_array( 'current-menu-ancestor', $classes ) ||
    in_array( 'current-menu-parent', $classes ) ||
    in_array( 'current_page_parent', $classes ) ||
    in_array( 'current_page_ancestor', $classes )
    ) {

    $classes[] = "active";
  }

  return $classes;
}

Wenn Sie möchten, dass für ein aktuelles Element die Klasse aktiv ist, können Sie dies tun:

add_filter('nav_menu_css_class', 'add_active_class', 10, 2 );

function add_active_class($classes, $item) {

  if( in_array( 'current-menu-item', $classes ) ||
    in_array( 'current-menu-ancestor', $classes ) ||
    in_array( 'current-menu-parent', $classes ) ||
    in_array( 'current_page_parent', $classes ) ||
    in_array( 'current_page_ancestor', $classes )
    ) {

    $classes[] = "active";
  }

  return $classes;
}
2
user23654