Advanced Custom Fields

have_rows()Leitura de 3 minutos

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

<?php
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' ):
	        the_sub_field('iframe');
  	    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
if( have_rows('locations') ): ?>
    <div class="locations">
    <?php // loop #1
    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; ?>

Posts relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *