have_rows()

Esta função verifica se o campo (repetidor ou conteúdo flexível) tem quaisquer linhas de dados para executar um loop. Esta é uma função booleana, ou seja, ele retorna VERDADEIRO ou FALSO.

Esta função é uma substituição para a função has_sub_field, no entanto, tem algumas diferenças pequenas mas significativas. A principal diferença é que esta função não percorre as linhas por si só, por isso, para percorrer as linhas, você também deve usar a função the_row.

Utilizar have_rows e the_rows juntos segue a mesma lógica de usar have_posts e the_post no Loop padrão do WP.

Parâmetros

<?php have_rows($field_name, $post_id); ?>
  • $field_name: nome do campo repetidor / conteúdo flexível (obrigatório)
  • $post_id: Especifica o ID do post  onde o seu valor foi digitado. O padrão é pegar o do post atual, do loop que você está. Você também pode passar ID de uma página de opções, taxonomias, usuários, etc. (opcional)

Como utilizar

Loop Básico

if( have_rows('parent_field') ):

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

        // Your loop code
        the_sub_field('sub_field');

    endwhile;

else :

    // no rows found

endif;

Loop para um Campo Repetidor

<?php if( have_rows('repeater') ): ?>

	<ul class="slides">

	<?php while( have_rows('repeater') ): the_row(); 

		$image = get_sub_field('image');

		?>

		<li class="slide">

			<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />

		    <p class="caption"><?php the_sub_field('caption'); ?></p>

		</li>

	<?php endwhile; ?>

	</ul>

<?php endif; ?>

Loop para um campo de conteúdo flexível

<?php if( have_rows('flexible_content') ): ?>

	<ul class="slides">

	<?php while( have_rows('flexible_content') ): the_row(); ?>

		<li class="slide">

			<?php if( get_row_layout() == 'image_slide' ): 

				$image = get_sub_field('image');

				?>
				<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />

			<?php elseif(get_row_layout() == 'video_slide' ): ?>

				<?php the_sub_field('iframe'); ?>

			<?php endif; ?>

		</li>

	<?php endwhile; ?>

	</ul>

<?php endif; ?>

Loop Aninhados

Este exemplo mostra um campo repetidor (locations) que contém um título, descrição e um outro campo repetidor dentro dele (staff_members) contendo membros da equipe.

have_rows function irá  detectar a troca de $field_name e iniciar um novo loop instantâneamente!

<?php // test loop #1 ?>
<?php if( have_rows('locations') ): ?>

	<div class="locations">

	<?php // loop #1 ?>
	<?php while( have_rows('locations') ): the_row(); ?>

		<div class="location">

			<h3><?php the_sub_field('title'); ?></h3>
			<p><?php the_sub_field('description'); ?></p>

			<?php // loop #2 (aninhado) ?>
			<?php if( have_rows('staff_members') ): ?>

				<ul class="staff-members">

					<?php while( have_rows('staff_members') ): the_row();

						$image = get_sub_field('image');

						?>
						<li>
							<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" />
							<h4><?php the_sub_field('name'); ?></h4>
						</li>

					<?php endwhile; ?>

				</ul>

			<?php endif; ?>
		</div>

	<?php endwhile; ?>
	</div>

<?php endif; ?>

Deixe uma resposta