Отображение портретных изображений в парах с помощью Cycle2

Я пытаюсь создать портфолио изображений горизонтальных и вертикальных изображений в WordPress, используя 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>';
}

2

Решение

Самый простой вариант — запустить обычный цикл и выводить только 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>';
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

По вопросам рекламы [email protected]