Holen Sie sich mit dieser Abfrage alle Bilder von einer einzelnen Seite

7

Ich habe einige Probleme mit diesem Beispiel-Widget-Code. Ich möchte alle Bilder (abzüglich der Miniaturansicht des Beitrags) von einer Seite namens "Galerie" abrufen, aber aus irgendeinem Grund werden alle hochgeladenen Bilder von der gesamten Website abgerufen.

Wie würde ich vorgehen, um das Post-Thumbnail von dieser Abfrage auszuschließen?

  query_posts('pagename=gallery');
if (have_posts()) : 
echo "<ul class='recentwidget group photowidget'>";
while (have_posts()) : the_post();
    $args = array(
    'post_type' => 'attachment',
    'numberposts' => 1,
    'post_status' => null,
    'post_parent' => $post->ID
);

$attachments = get_posts( $args );
    if ( $attachments ) {
    foreach ( $attachments as $attachment ) {
       echo '<li class="left imageshadow photolarge">';
       echo wp_get_attachment_image( $attachment->ID, 'full' );
       echo '</li>';
      }
    }
endwhile;

endif; 
wp_reset_query();
Dean Elliott
quelle
Anscheinend ist die Verwendung von query_postsnicht ohne Nachteile . Haben Sie versucht, get_postsstattdessen zu verwenden? Aber dann denke ich, dass die Verwendung von The Loop in diesem Fall übertrieben ist. Codieren Sie einfach die Seiten-ID in Ihrem Anruf an get_posts(der sich derzeit in The Loop befindet).
Raphael
Leider ist mein Client ein Fan von query_posts (etwas damit zu tun, dass sie es später bearbeiten können, falls sie es brauchen). Gibt es keine Möglichkeit, dies mit query_posts zu tun?
Dean Elliott
Nein Entschuldigung. Ich habe so etwas nicht wirklich selbst gemacht, und wenn ich den Codex überfliege, erscheint mir Ihr Code vernünftig (abgesehen vom Husten im Codierungsstil ). Oh, es ist Auftragsarbeit. In diesem Fall möchten Sie Ihr Feature wahrscheinlich in ein kleines Plugin mit einer Optionsseite einbinden, damit es nicht beschädigt wird (und Sie es wiederverwenden können). Vielleicht sogar ein vorhandenes Plugin verwenden ?
Raphael
siehe diese FAQ: wordpress.stackexchange.com/questions/1753/…
Ole Henrik Skogstrøm
Außerdem würde ich Ihnen empfehlen, WP_query zu verwenden, wenn Sie sekundäre Schleifen erstellen, beispielsweise in Widgets. Wenn Sie jedoch die Funktion query_posts verwenden müssen, um die Hauptschleife zu ändern, müssen Sie der Argumentliste query_posts eine Paginierung hinzufügen. scribu.net/wordpress/wp-pagenavi/…
Ole Henrik Skogstrøm

Antworten:

8

Verwenden Sie get_children

Ich habe diesen Code verwendet, um alle Bilder aus einer Seitengalerie in der ausgewählten Reihenfolge zu extrahieren. Sie können diesen Code in die Schleife aufnehmen oder eigenständig verwenden. Wählen Sie einfach den entsprechenden post_parent-Code (siehe unten im Codebeispiel).

Dieses Beispiel zeigt alle Bilder, die der Seiten-ID 1 zugeordnet sind.

        $images = get_children( array( 'post_parent' => 1, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order', 'order' => 'ASC', 'numberposts' => 999 ) ); 
/* $images is now a object that contains all images (related to post id 1) and their information ordered like the gallery interface. */
        if ( $images ) { 

                //looping through the images
                foreach ( $images as $attachment_id => $attachment ) {
                ?>

                            <?php /* Outputs the image like this: <img src="" alt="" title="" width="" height="" /> */  ?> 
                            <?php echo wp_get_attachment_image( $attachment_id, 'full' ); ?>

                            This is the Caption:<br/>
                            <?php echo $attachment->post_excerpt; ?>

                            This is the Description:<br/>
                            <?php echo $attachment->post_content; ?>

                <?php
                }
        }

Suchen Sie die Post-ID, aus der Sie Bilder extrahieren möchten, und fügen Sie sie in dieses Argument ein: 'post_parent' => 1(Ersetzen Sie die 1 durch Ihre Seiten-ID.)

Sie können auch verwenden:

'post_parent' => $post->ID

Wenn Sie get_children in einer Schleife verwenden und die Post-ID aus der zurückgegebenen Post-ID abrufen möchten.

Wenn Sie das als vorgestellten Bild ausgewählte Bild ausschließen möchten, würde ich eine ifAnweisung überprüfen lassen, ob die Bild-URL der vorgestellten Bild-URL entspricht.

Hoffe das hilft! :) :)

Ole Henrik Skogstrøm
quelle
Das hat perfekt funktioniert. Gibt es eine Möglichkeit, die Ausgabe des Bildes zu ändern? Zum Beispiel eine bestimmte Klasse hinzufügen?
Dean Elliott
Schön, hilfreich zu sein :) Wenn Sie dieses Array wie folgt in die Liste der Argumente für die Funktion wp_get_attachment_image aufnehmen: wp_get_attachment_image ($ attachment_id, 'full', array ('class' => "your-calss")); Ich glaube, Sie bekommen den gewünschten Effekt, haben es aber nicht versucht.
Ole Henrik Skogstrøm
1
codex.wordpress.org/Function_Reference/wp_get_attachment_image <- siehe diese Codex-Seite für weitere Informationen :)
Ole Henrik Skogstrøm
1
Dank dafür. Am Ende habe ich die Bildausgabe einfach in eine Liste eingewickelt und den gewünschten Effekt erzielt.
Dean Elliott
-1

Am einfachsten ist die Verwendung get_attached_media(). Es gibt viele verschiedene Möglichkeiten, von denen fast alle hier behandelt werden

Barış Atasoy
quelle
Bitte bearbeiten Sie Ihre Antwort und fügen Sie mindestens eine kurze Beschreibung aller Möglichkeiten hinzu und teilen Sie dann den Link. Eine Nur-Link-Antwort wird irrelevant, wenn der Link tot ist.
Mayeenul Islam