web-dev-qa-db-ja.com

単一の投稿メタ値からすべての画像を一覧表示する

画像ギャラリーのアップロードを使用してカスタム投稿タイプを作成しました。今私はフロントエンドにギャラリーを表示しようとしています。これは私がこれまでに持っているもので、1つの画像を表示するために機能しますが、複数の画像がアップロードされている場合、すべてのURLがsrcタグで行き詰まります。それで、私はその配列をループして、それぞれを別々に吐き出すべきだと思いますか?それが進むべき道でしょうか、そしてもしそうなら、どうすればこれを達成できますか?

<?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; ?>

編集:

これは私がその作品になったものです...

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

画像を保存する方法を再編成する必要があります。アップロードしたファイルをその特定の投稿の子にします。投稿メタフィールドに入れないでください。それから get_children() ですべての画像を取得します。いくつかの例については、[gallery]ショートコードの組み込みハンドラを見てください。

私はこのように行かなければなりません:

$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
}

また、投稿メタフィールドを使い続けたい場合でも、URLを保存しないでください。代わりに添付ファイルIDを使用してください。 URLはいつでも変更できます(開発サイトから本番サイトへの移行を検討してください)。

2
fuxia

それで、私はその配列をループして、それぞれを別々に吐き出すべきだと思いますか?それが進むべき道でしょうか、そしてもしそうなら、どうすればこれを達成できますか?

はい。 get_post_meta(...)は、最後のパラメータなしで、あるいはfalseに設定して、配列を返すべきです。あなたはその後持っているでしょう...

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