2017-12-06 14 views
1

こんにちは、私は現在、Wordpressのバックエンドからギャラリーから画像を取り出すforeachループに取り組んでいます。ギャラリーは正常に動作していますが、期待どおり、重複した写真が表示されないようにしたいと思います。foreach内の重複する投稿を防止する

<?php if() $query->have_posts()): 
    $thumbs = []; 
?> 
<?php 
    foreach($query->posts as $gallery): 
     $images = get_field('gallery_images', $gallery->ID); 
     if($images): 
     foreach($images as $image): 
      $cropped_img = aq_resize($image['url'], 1024, 576, true, true, true); 
      $img_id[] = $image['ID']; 
      $thumbs[] = $cropped_img;    
?> 

ここで問題

<?php endforeach; endif; endforeach; ?> 
<?php foreach($thumbs as $thumbnail): ?> 
    <div class="gallery__thumb"><img src="<?= $thumbnail; ?>"></div> 
<?php endforeach; ?> 

とは無関係のHTMLは、私が動作するようにしようとしているものを、本質的です。画像IDに2つの変数を追加して、最初のコードブロックに重複しないようにしました。だから、最初のif/foreachの状態は次のように見えること:私はこれを経験していたサムネイル

<?php foreach($thumbs as $thumbnail): ?> 
    <?php foreach($img_id as $img): ?> 
     <?php if ($img == $do_not_duplicate) : ?> 
     //do nothing 
     <?php else : ?> 
     <div class="gallery__thumb"><img src="<?= $thumbnail; ?>"></div> 
     <?php endif; ?> 
<?php endforeach; endforeach; ?> 

問題のために、その後のforeach続く

<?php if($images): 
    foreach($images as $image): 
    $cropped_img = aq_resize($image['url'], 1024, 576, true, true, true); 
    $img_id[] = $image['ID']; 
    $do_not_duplicate[] = $image['ID']; 
    $thumbs[] = $cropped_img; 
?> 

が、私は22枚の画像が23をoutputed取得していますです(2つのイメージが引かれているため)。本質的に私は重複のない22の画像を達成しようとしています。

洞察力は大変ありがとうございます、事前におねがいします。

$thumbs[$image['ID']] = $cropped_img; 

それは画像をキーとしてIDが格納されている連想配列となりますので、二重像が配列にプッシュされている場合、それだけでオーバーライドします:

答えて

0

は、単にそのようなあなたのPHPコードを編集します古いもの

0

あなたのコードに基づいて、それは次のようになります。

<?php if($images): 
    foreach($images as $image): 
    $cropped_img = aq_resize($image['url'], 1024, 576, true, true, true); 
    $img_id[] = $image['ID']; 
    $thumbs['url'][] = $cropped_img; 
    $thumbs['id'][] = $image['ID'] 
?> 

その後、

<?php foreach($thumbs as $thumbnail): ?> 
    <?php if (!in_array($thumbnail['do_not_duplicate'], $img_id)): ?> 
     <div class="gallery__thumb"><img src="<?= $thumbnail['url']; ?>"></div> 
    <?php endif; ?> 
<?php endforeach; ?> 
+0

非常に助かりました、ありがとうございます! – thelgloriouspast

0

イメージIDは、追加する前に$ img_id配列に既に存在するかどうかを確認できます。

私は

<?php if() $query->have_posts()): 
    $thumbs = []; 
?> 
<?php 
    foreach($query->posts as $gallery): 
     $images = get_field('gallery_images', $gallery->ID); 
     if($images): 

     // Initialize $img_id[] 
     $img_id = []; 

     foreach($images as $image): 

      // Only add to the $img_id array and $thumbs array if 
      // $image['ID'] is not in $img_id array 
      if(! in_array($image['ID'], $img_id)): 
      $cropped_img = aq_resize($image['url'], 1024, 576, true, true, true); 
      $img_id[] = $image['ID']; 
      $thumbs[] = $cropped_img;    
?> 

の下にあなたのコードを修正は、この情報がお役に立てば幸い!

$ image ['ID']の値によって、in_array()の3番目の引数を渡して厳密な検査を行う必要があるかもしれません。

参考:http://php.net/manual/en/function.in-array.php

+0

ありがとう! – thelgloriouspast

関連する問題