.current-menu-ancestor für aktive Elternseiten einer WordPress-Gallerie-Anhangseite

Note: Content might be outdated!

Im Zeitalter der Lightbox-Overlays und ganzseitig zu swipender HTML5-Slideshows wirkt die Standard-Galerie in WordPress vielleicht etwas altbacken. Sie tut aber immer noch treu ihren Dienst und hat einen entscheidenden Vorteil gegenüber vielen Javascript-Substituten: sie generiert einen Permalink für jedes Bild, die sogenannte Anhang-Seite.
Themes wie Twenty Eleven oder das Entwickler-Toolkit _s unterstützenden diese mit einem eigenen Template (z.B. die Datei image.php) und bieten so eine robuste Galerielösung ganz ohne zusätzliches Plugin.

Optionen für die Standard-Galerie in WordPress
Galerieeinstellungen in WordPress: Verlinkung auf die Anhangseite generiert einen Permalink für jedes Bild.

Systemseitig ist die Anhangseite für ein bestimmtes Bild eine Kindseite des Artikels oder der Seite, mit denen das Bild verknüpft ist. Momentan (wir schreiben die 3.4er-Version von WordPress) stellt dies eine eindeutige Zuordnung dar; jede Anhangseite hat genau 1 Eltern (post_parent) und ggf. mehrere Ahnen (ancestors) darüber (siehe auch wp-includes/post.php).

Aktive Galerie-Elternseiten ohne Kennzeichnung im Menü

In Kombination mit den benutzerdefinierten Menüs in WordPress weist die bord-eigene Galerie allerdings ein kleines – hm – Feature auf, das zwar einerseits konsistent mit Logik und Funktionalität der Galerie geht, andererseits aber für Benutzer im Frontend Verwirrung stiften kann:

Aktive Seite mit Gallery
Hier ist noch alles gut: aktive Seite mit Gallery

Klickt man durch die einzelnen Bilder einer Galerie, die zu einer Seite (und nicht zu einem Artikel) gehört, kann man am Menü nicht mehr sehen, von welcher Seite man in die Galerie gelangt ist – oder aus Sicht des Benutzers: auf welcher Seite man sich „befindet“; die visuelle Hervorhebung des entsprechenden Menüpunkts versagt, weil die systemeigenen CSS-Klassen .current-menu-item bzw. .current-menu-parent und .current-menu-ancestor nicht vergeben werden.

Dieses Verhalten von WordPress ist, logisch betrachtet, natürlich völlig korrekt. Da man sich, die URL verrät es, eben nicht mehr auf der Seite mit der Galerie, sondern auf einer ihrer Anhangseiten befindet, wird die ursprüngliche Trägerseite der Galerie auch nicht als aktiv klassifiziert. Nur ist diese Logik für Menschen, zu deren täglichen Fingerübungen Begriffe wie Post Types und Attachments nicht gehören, ohne einen Crash-Kurs in Software-Architektur m.E. schwer vermittelbar.

Systemklassen für Elternseiten einer aktiven Galerie vergeben

Glücklicher Weise lässt sich die Systemlogik zugunsten der leichteren Orientierung für den Benutzer austricksen. Die folgende Funktion gehört in die functions.php des Theme und fügt der/den im Menü vertretenen Eltern- und/oder Ahnenseite/n einer aktiven Anhangseite die CSS-Klasse .current-menu-ancestor hinzu. Diese lässt sich vie Stylesheet dann entsprechend visuell markieren.

function _s_current_attachment_nav_class( $classes, $menu_item ) {

	global $wp_query, $post;

	if( true == $wp_query->is_singular && 'attachment' == $post->post_type && in_array( $menu_item->object_id, $post->ancestors ) ) {
		array_push( $classes, 'current-menu-ancestor' );
	}

	return $classes;
}
add_filter( 'nav_menu_css_class', '_s_current_attachment_nav_class', 10, 2 );
Anhangseite
Anhangseite des Gallery-Bilds mit Kennzeichnung der aktiven Eltern- bzw. Ahnenseiten im Menü

3 reactions on “.current-menu-ancestor für aktive Elternseiten einer WordPress-Gallerie-Anhangseite

  1. Hast du dazu mal eine passendes Beispiel für eine Seite wo es nicht stimmt und eine wo es dann stimmt? Die Seite aus dem Artikel sieht ja auch sehr schick aus!

    1. Leider nein, die Seite ist noch nicht online, und wenn sie es ist, wird es überall stimmen. 😉
      Denk dir auf dem letzten Screenshot einfach die zweite Menü-Ebene weg und alle Menü-Links in der ersten Eben in blau.

      Update:

      Das Design ist übrigens von dieser Kollegin, ich mache nur die Umsetzung.

Reactions are closed.