2015-03-19 2 views
2

Я пытаюсь создать портфолио изображений горизонтальных и вертикальных изображений в Wordpress с использованием Cycle2, где все вертикальные (портретные) изображения отображаются парами. Следующий код работает, но он отображает каждое изображение дважды, один раз как текущий и один раз как следующий. Как пропустить изображение, если оно было показано ранее? Благодаря!Отображать портретные изображения парами, используя Cycle2

$args = array(
    'post_type' => 'attachment', 
    'numberposts' => -1, 
    'post_parent' => $post->ID, 
    ); 

    $attachments = get_posts($args); 
    $length = count($attachments); 
    for($i = 0; $i < $length ; ++$i) { 
     $attachment = current($attachments); 
     $next_attachment = next($attachments);     
     $image_attributes = wp_get_attachment_image_src($attachment->ID, 'large'); 
     $next_image_attributes = wp_get_attachment_image_src($next_attachment->ID, 'large'); 
     $w = $image_attributes[1]; 
     $h = $image_attributes[2]; 
     $nw = $next_image_attributes[1]; 
     $nh = $next_image_attributes[2]; 
      if($h > $w & $nh > $nw) { 
       echo '<li>'; 
       echo wp_get_attachment_image($attachment->ID, 'large'); 
       echo wp_get_attachment_image($next_attachment->ID, 'large'); 
       echo '</li>'; 
      } 

ответ

1

логика Стива является правильным, но для того, чтобы current и next на работу, for петли необходимо использовать. Все, что мне нужно было сделать, - подсчитать все экземпляры портретов и выводить только нечетные. Следующие работы:

$args = array(
'post_type' => 'attachment', 
'numberposts' => -1, 
'post_status' => null, 
'post_parent' => $post->ID, 
'orderby' => menu_order, 
'order' => 'ASC' 
); 

$attachments = get_posts($args); 
$length = count($attachments); 
$counter = 0; 

for($i = 0; $i < $length ; ++$i) { 
    $attachment = current($attachments); 
    $next_attachment = next($attachments);     
    $image_attributes = wp_get_attachment_image_src($attachment->ID, 'large'); 
    $next_image_attributes = wp_get_attachment_image_src($next_attachment->ID, 'large'); 
    $w = $image_attributes[1]; 
    $h = $image_attributes[2]; 
    $nw = $next_image_attributes[1]; 
    $nh = $next_image_attributes[2]; 
    if($h > $w) { 
     $counter++; 
     if(($nh > $nw) and ($counter % 2 == 1)) { 
      echo '<li>'; 
      echo wp_get_attachment_image($attachment->ID, 'large'); 
      echo wp_get_attachment_image($next_attachment->ID, 'large'); 
      echo '</li>'; 
     } elseif(($nh < $nw) and ($counter % 2 == 1)) { 
      echo '<li>'; 
      echo wp_get_attachment_image($attachment->ID, 'large'); 
      echo '</li>'; 
     } elseif((!$next_attachment) and ($counter % 2 == 1)) { 
      echo '<li>'; 
      echo wp_get_attachment_image($attachment->ID, 'large'); 
      echo '</li>'; 
     } 
    } elseif($h < $w) { 
     echo '<li>'; 
     echo wp_get_attachment_image($attachment->ID, 'large'); 
     echo '</li>'; 
     $counter = 0; 
    }  
} 
1

Самый простой вариант, чтобы запустить регулярный цикл, и выход только li элементы любой другой итерации:

$args = array(
    'post_type' => 'attachment', 
    'numberposts' => -1, 
    'post_parent' => $post->ID, 
); 

$attachments = get_posts($args); 
echo '<li>'; 
$counter=0; 
foreach($attachments as $attachment){ 


    $image_attributes = wp_get_attachment_image_src($attachment->ID, 'large'); 
    $w = $image_attributes[1]; 
    $h = $image_attributes[2]; 
    if($h > $w) { 
     $counter++; 
     echo wp_get_attachment_image($attachment->ID, 'portfolio'); 
     if($counter %2 == 0){ 
      echo '</li><li>'; 
     } 
    } 

} 
echo '</li>'; 
+0

Спасибо, но портфолио будет состоять не только из портретных изображений, поэтому мне нужно включить какое-то заявление, в котором пропускаются только портретные изображения. – MrArkadin

+0

@MrArkadin Ах да, пропустил это - я сделал редактирование, поэтому счетчик увеличивается только для изображений портфолио. – Steve

+0

Я попытался выполнить эту работу, но кажется, что «следующий» и «текущий» работают не так, как ожидалось, внутри цикла foreach, поэтому я не могу подсчитать размеры следующего прикрепления – MrArkadin

Смежные вопросы