it-swarm.com.de

Listet alle Bilder eines einzelnen Post-Metawerts auf

Ich habe einen benutzerdefinierten Beitragstyp mit einem Bildergalerie-Upload erstellt. Jetzt versuche ich, die Galerie im Frontend anzuzeigen. Dies ist, was ich bis jetzt habe, das funktioniert, um 1 Bild anzuzeigen, aber wenn mehrere Bilder hochgeladen werden, bleiben alle URLs im Tag src hängen. Also denke ich, ich sollte durch dieses Array gehen und jedes einzeln ausspucken? Wäre das der richtige Weg und wenn ja, wie kann ich das erreichen?

<?php if (have_posts()) :  while (have_posts()) : the_post(); ?>

<?php
echo '<img src="'.get_post_meta($post->ID, 'gallery-upload', true).'">';    
?>

<?php endwhile; else: ?>
 <p><?php _e('No posts were found. Sorry!'); ?></p>
<?php endif; ?>

BEARBEITEN:

Dies ist, was ich damit endete, funktioniert ...

<?php
foreach(get_post_meta($post->ID, 'gallery-upload') as $meta) {
 foreach(explode(',', $meta) as $src) {
  echo '<img src="'.htmlentities($src).'">';
 }
}
?>
1
souporserious

Sie sollten die Art und Weise, in der Sie die Bilder speichern, neu organisieren: Machen Sie die hochgeladenen Dateien zu untergeordneten Elementen dieses bestimmten Posts, und fügen Sie sie nicht in ein Post-Metafeld ein. Dann holen Sie sich alle Bilder mit get_children() . Im integrierten Handler finden Sie einige Beispiele für den [gallery] shortcode.

Ich sollte so gehen:

$args = array( 
   'post_mime_type' => 'image',
   'numberposts'    => -1,
   'post_parent'    => get_the_ID(),
   'post_type'      => 'attachment' 
);

$attached_images = get_children( $args );

foreach ( $attached_images as $image )
{
    // print image
}

Und selbst wenn Sie bei Post-Meta-Feldern bleiben möchten, speichern Sie keine URLs, sondern verwenden Sie stattdessen die Anhangs-IDs. URLs können sich jederzeit ändern (denken Sie an eine Migration von Entwickler zu Produktionsstandort).

2
fuxia

Also denke ich, ich sollte durch dieses Array gehen und jedes einzeln ausspucken? Wäre das der richtige Weg und wenn ja, wie kann ich das erreichen?

Ja. get_post_meta(...) sollte ein Array ohne diesen letzten Parameter oder mit dem Wert false zurückgeben. Du hättest dann ...

<?php
$meta = get_post_meta($post->ID, 'gallery-upload');
foreach ($meta as $m) {
    echo '<img src="'.$m.'">'; 
} 
?>
0
s_ha_dum