Получить конкретную строку в повторителе с определенным значением - PullRequest
0 голосов
/ 17 сентября 2018

Я использую поле повторителя Advanced Custom Fields , в котором есть два поля для каждой строки - image и main_image.

Если main_image в строке имеет "Да "выбран, то я хочу, чтобы он вывел image из этой строки.Если «Да» не выбрано для каких-либо строк, то я просто хочу, чтобы он выбрал первый image.

Где я иду не так?

<?php if( have_rows( 'gallery' ) ): ?>
  <?php $rowcounter = 1;
  while( have_rows( 'gallery' ) ): the_row(); ?>
    <?php $image = get_sub_field( 'image' ); ?>

    <?php if(get_sub_field('main_image') == "Yes") { ?>

      <a href="#" class="slide">
        <img src="<?php echo $image[$rowcounter]['url']; ?>" alt="<?php echo $image[$rowcounter]['alt']; ?>">
      </a>

    <?php } else { ?>

      <a href="#" class="slide">
        <img src="<?php echo $image[1]['url']; ?>" alt="<?php echo $image[1]['alt']; ?>">
      </a>  

    <?php } ?>  


  <?php $rowcounter++;
  endwhile; ?>
<?php endif; ?>

Я подумал, делая это<?php echo $image[$rowcounter]['url']; ?> будет выводить изображение из этой строки.

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Попробуйте загрузить первый ряд, затем запустите цикл, чтобы условно изменить значение рекомендуемого изображения.

<?php 

if( have_rows( 'gallery' ) ) 
{
    // Load the first row and set the featured image
    the_row();

    $featured_image = get_sub_field( 'image' );

    while( have_rows( 'gallery' ) )
    { 
        the_row();

        // If a different image was set to be featured, set it and break out of loop
        if( get_sub_field('main_image') == "Yes" ) 
        {
            $featured_image = get_sub_field( 'image' );
            break;
        }
    }
?>
    <a href="#" class="slide">
        <img src="<?php echo $featured_image['url']; ?>" alt="<?php echo $featured_image['alt']; ?>">
    </a>  
<?php
}
?>
0 голосов
/ 17 сентября 2018

Ваш $image var сбрасывается при каждой while - итерации в этой строке: <?php $image = get_sub_field( 'image' ); ?>. Кроме того, вам не нужно закрывать php-теги, чтобы снова открыть их на следующей строке, это только затрудняет чтение кода.

<?php if ( have_rows( 'gallery' ) ) :

$images = [];
$i = 0;

while ( have_rows( 'gallery' ) ): the_row();

    $images[ $i ] = get_sub_field( 'image' );

    if ( get_sub_field( 'main_image' ) == "Yes" ) { ?>

        <a href="#" class="slide">
            <img src="<?php echo $images[ $i ][ 'url' ]; ?>" alt="<?php echo $images[ $i ][ 'alt' ]; ?>">
        </a>

    <?php } else { ?>

        <a href="#" class="slide">
            <img src="<?php echo $images[ 0 ][ 'url' ]; ?>" alt="<?php echo $images[ 0 ][ 'alt' ]; ?>">
        </a>

    <?php }

    ++$i;

endwhile;
endif; ?>
...