Artikelbild aus Galerie ausblenden

Geschrieben von am 03. Apr 2012 in Tipps & Tricks - 16 Kommentare

Vor nicht langer Zeit war ich für ein Kundenprojekt auf der Suche nach einer Lösung, um das Artikelbild eines Beitrags aus der zugehörigen Galerie auszublenden. Der Grund hierfür war einfach: Das Bekleidungsgeschäft will in der Artikelübersicht (die die Übersicht der verkauften Marken darstellt) die Logos der jeweiligen Marken anzeigen. Die Galerie selbst (mit allen zusätzlichen Extras wie Beschriftungen, Pfeilnavigationen und Vorschaubilder anderer Galeriebilder) soll aber nur mit Bildern einzelner Stile oder Kleidungsvorschlägen gefüllt sein. Um’s kurz zu machen: Das Artikelbild darf bei dieser Anforderung nicht in der Galerie gezeigt werden.

Weil ich glaube, dass das auch für andere interessant sein könnte (ich selbst musste damals auch lange suchen und es am Ende selbst „bauen“), will ich euch meine Lösung mal – relativ unkommentiert – vorstellen.

Vorschaubilder/Übersicht

WordPress bringt von Haus aus schon die Möglichkeit mit, Bilder einer Galerie per exclude auszuschließen. Alles was dazu notwendig ist, ist das Erstellen eines query. In diese können dann alle Argumente, die beim Ausliefern der Galeriebilder berücksichtigt werden sollen, abgelegt werden. Die einzige „Schwierigkeit“ besteht dann darin, das Artikelbild zu „finden“ und auszuschließen.

Artikel

Im Artikel selbst ist das auch das geringere Problem, WordPress liefert hierfür sehr entspannt das „get_post_thumbnail_id“. Wird das für den exclude genutzt, ist das Bild aus der Galerievorschau, bzw. der Übersicht der Galeriebilder verschwunden. Das gilt in dieser Einfachheit aber nur für die Vorschau, die in der single.php erstellt wird.

Denkbar ist dann folgender Codeschnipsel:

<?php
	$args = array(
	'post_type'   => 'attachment',
	'order' => 'ASC',
	'orderby' => 'menu_order ASC',
	'numberposts' => -1,
	'post_status' => null,
	'post_parent' => $post->ID,
	'exclude'     => get_post_thumbnail_id()
	);
	$attachments = get_posts( $args );
	if ( $attachments ) : foreach( $attachments as $attachment ) :
	echo '<li><a href="' . get_attachment_link( $attachment->ID ) . '">' . wp_get_attachment_image($attachment->ID, mittel, false ) . '</a></li>';
	endforeach;
	endif;
?>

Ein wenig komplizierter, wird es im Anhang-Template.

Anhang

Denn hier ist das Artikelbild ja nicht das Artikelbild des Anhangs, sondern das des zugehörigen „Vater-/Mutterbeitrags“. Dem entsprechend darf der exclude nicht per „get_post_thumbnail_id“ erfolgen, sondern bedarf einer weitergehender Überlegung beim exclude im Anhang-Template (hier image.php).

Hierbei muss die auszuschließende ID erst über eine Zusatzvariable ermittelt werden. Schon mal ein Hinweis: Diese Zusatzvariable spielt auch beim Ausblenden des Bildes in der „richtigen“ Galerie eine Rolle, also nicht vergessen. 😉

Die vorangehende Überlegung ist, dass das Artikelbild des Vater-/Muterbeitrags ausgeblendet werden muss. Mit diesem Wissen können die Bordmittel von WordPress bei der Erstellung der Variablen dann einfach genutzt werden:

$thumb_ID = array( get_post_thumbnail_id( $post->post_parent ));

Ist dieser Schritt getan, kann abermals ein ganz normales Query genutzt werden, um der Übersicht der Vorschaubilder die nötigen Argumente zuzuweisen. Bitte nicht verunsichern lassen, ich habe aus Gründen der Übersichtlichkeit (für mich) hier andere Namen verwendet.

<?php
	$thumb_ID = array( get_post_thumbnail_id( $post->post_parent ));
	$images = get_children( array(
	'post_parent' => $post->post_parent,
	'post_status' => 'inherit',
	'post_type' => 'attachment',
	'post_mime_type' => 'image',
	'order' => 'ASC',
	'orderby' => 'title',
	'exclude' => $thumb_ID
	) );
	if( $images ) :	foreach( $images as $id => $image ) :
	echo '<li><a href="' . get_attachment_link( $image->ID ) . '">' . wp_get_attachment_image( $image->ID, array( 115, 115 ), false ) . '</a></li>';
	endforeach;	endif;
?>

Mit dieser Lösung werden dann auf den Anhang-URLs die Vorschaubilder in einer Übersicht gezeigt, das eigentliche Artikelbild bleibt aber ausgeblendet.

Galeriebilder

Navigiert man (etwa durch eine Pfeilnavigation) dann durch die Bilder der Galerie, soll das Artikelbild natürlich weiterhin ausgeblendet sein, dafür wird abermals die weiter oben definierte Variable $thumb_ID benötigt. Denn auch jetzt muss dieses Bild ja wieder ausgeblendet werden. Das folgende Beispiel wird noch um eine weitere Information erweitert: Nämlich, dass nach dem letzten Bild wieder das erste Bild der Galerie folgt. So ergibt sich für den Nutzer das Bild einer Endlosschleife. Um diese Funktion zu nutzen, muss einfach die Variale $nbild_url als Link genutzt werden. Es kann damit dann auch etwa das Bild verlinkt werden; Ein Klick auf das angezeigte Galeriebild reicht dann, um zum nächsten zu gelangen:

?php
	$attachments = array_values( get_children( array( 'post_parent' => $post->post_parent, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ASC', 'exclude' => $thumb_ID ) ) );
	foreach ( $attachments as $b => $attachment ) {
	if ( $attachment->ID == $post->ID )
		break;
		}
	$b++;
	// Mehr als ein Bild in der Galerie
	if ( count( $attachments ) > 1 ) {
	if ( isset( $attachments[ $b ] ) )
	// URL des naechsten Bildes
	$nbild_url = get_attachment_link( $attachments[ $b ]->ID );
	else
	// oder URL des ersten Bildes
	$nbild_url = get_attachment_link( $attachments[ 0 ]->ID );
	} else {
	// oder - bei nur einem Bild in der Galerie - Link zum Bild
	$nbild_url = wp_get_attachment_url();
	}
?>

Viel Spaß damit, bei Fragen einfach in den Kommentaren fragen!

Achso: Über eine virale Verbreitung über bekannte Netzwerke (Facebook, twitter, Google+) wäre ich sehr dankbar!

Bitte sozial teilen

Wenn dir dieser Beitrag gefallen hat, dann teile ihn doch bitte in den verschiedenen sozialen Netzwerken! Du würdest mir damit sehr helfen!

Über den Autoren

Mein Name ist Christian. Ich blogge bereits seit 5 Jahren - manchmal mehr, manchmal weniger erfolgreich. Weil ich in der Anfangszeit meiner Erfahrungen mit den von WordPress gebotenen Möglichkeiten unzufrieden war, habe ich mir einiges Wissen zu dieser tollen Software selbst beigebracht. Aus diesen Erfahrungen ist das Projekt wpLove.de geboren. Neben WordPress bringe ich mir aber auch das Thema SEO selbst etwas näher.

16 Kommentare zu "Artikelbild aus Galerie ausblenden"

  1. heike 11. Juli 2012 um 20:32 · Antworten

    Hallo,
    ich habe tatsächlich die gleiche Anforderung und bin happy eine Lösung gefunden zu haben, nur wo genau trag ich diesen Code denn ein?
    Ich bin ziemlicher Neuling in WordPress …

    Vielen Dank für Deine Hilfe
    Heike

  2. Adrian 11. Juli 2012 um 21:02 · Antworten

    Ich habe ja nun mehrere „Codes“ hier veröffentlicht. 😉 Daher musst du mir erstmal sagen, welchen davon du meinst. 😉
    Grundsätzlich kannst du eine Galerie immer über die Attachment-Templates (in deinem fall image.php) steuern.

  3. heike 11. Juli 2012 um 21:04 · Antworten

    Ahh, ok. Ich möchte das Artikelbild in meiner Galerie deaktivieren, mach ich das dann auch in der image.php?

  4. heike 11. Juli 2012 um 21:06 · Antworten

    Vielen Dank für Deine Hilfe, werd das gleich mal probieren!

  5. heike 11. Juli 2012 um 21:09 · Antworten

    Schade, geht doch nicht. Ich habe gar keine Datei image.php. Gehört diese zum Theme? Ich nutze das Theme „Sliding Door“, kennst Du das zufällig?

    • Adrian 11. Juli 2012 um 21:19 · Antworten

      Bei den wenigsten Themes ist bereits ein Template-Attachment vorhanden, das musst du dann ggf. noch erzeugen. Wie stellst du deine Galerie denn derzeit dar?

  6. heike 11. Juli 2012 um 21:27 · Antworten

    In dem Theme ist dieses Imagemenü drin, das ich über Artikelbilder fülle. Ich hab aber außerdem auf all diesen Seiten noch eine Oik Nivo Slidesshow eingebunden und diese zeigt mir jetzt auch das Artikelbild.

    • Adrian 11. Juli 2012 um 21:29 · Antworten

      Damit ich’s mir mal anschauen kann: Gib mir doch mal bitte einen Link. Wie wird der Nivo-Slider bspw. denn befüllt?

  7. heike 11. Juli 2012 um 21:34 · Antworten

    heikes-fotobox – eine de-Domain. Der Artikel will nicht durchgehen wegen Spam-Verdacht – komisch…
    Es funktioniert nur der Beriech Portraits so einigermaßen…

    • Adrian 11. Juli 2012 um 21:37 · Antworten

      Naja, da gibt’s auch ne Fehlermeldung. 😉
      Aber nochmal die Frage: Wie befüllst du den Nivoslider denn? Fügst du der normalen WordPress-Galerie einfach Fotos hinzu?

  8. heike 11. Juli 2012 um 21:38 · Antworten

    ja genau. Und in dieser Galerie ist dann eben auch das Artikelbild.

    • Adrian 11. Juli 2012 um 21:40 · Antworten

      Na dann sollte es eigentlich kein Problem geben: Der Nivoslider holt sich aus einem Query ja auch seine Daten. Ich vermute mal, dass der in der index.php-Datei eingefügt ist. Dieses Query musst du mal finden und dann – entsprechend meiner Anleitung – editieren. Aber: Backup vorher nicht vergessen, falls es nicht funktionieren sollte. 😉

  9. heike 11. Juli 2012 um 21:48 · Antworten

    hmm, leider bin ich nicht fit genug das zu ändern. Vielleicht finde ich noch eine Galerie, die besser für meine Zwecke geeignet ist. Dir trotzdem ganz lieben Dank!
    Heike

  10. heike 11. Juli 2012 um 22:01 · Antworten

    Nochmal kurz abschließend, ich löse es jetzt einfach handisch mit: [nivo exclude=“|“].
    Ist zwar nicht ganz so elegant, funktioniert aber prima.
    Grüsse

Trackbacks zu diesem Artikel

  1. Google am Indizieren von Anhang-Seiten hindern › wpLove.de

Kommentar hinterlassen

XHTML Du kannst diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>