
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!
16 Kommentare zu "Artikelbild aus Galerie ausblenden"
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
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.
Ahh, ok. Ich möchte das Artikelbild in meiner Galerie deaktivieren, mach ich das dann auch in der image.php?
Ganz genau 😉
Vielen Dank für Deine Hilfe, werd das gleich mal probieren!
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?
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?
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.
Damit ich’s mir mal anschauen kann: Gib mir doch mal bitte einen Link. Wie wird der Nivo-Slider bspw. denn befüllt?
heikes-fotobox – eine de-Domain. Der Artikel will nicht durchgehen wegen Spam-Verdacht – komisch…
Es funktioniert nur der Beriech Portraits so einigermaßen…
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?
ja genau. Und in dieser Galerie ist dann eben auch das Artikelbild.
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. 😉
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
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