ACF转发器字段仅显示一行

时间:2019-05-31 09:03:03

标签: advanced-custom-fields repeater

下面的一些代码有问题 我使用wordpress和插件ACF PRO。 我查询一些帖子,在此帖子中,它们是转发器字段,但似乎只显示转发器字段“ evenement”的第一行。 我不知道是否很清楚吗?

有人可以帮助我。

谢谢

<?php $query = new WP_Query(
array( 
'category__not_in' => array(520),
'category__and' => array(2905,1582),
'post_status' => array( 'draft'),
'post_type' => 'spectacles',
'lang' => 'fr',
'showposts' => -1,
'meta_key' => 'date_debut',
'orderby' => 'meta_value_num',
'order' => 'ASC')
);?> 

<?php if($query->have_posts()) : while ($query->have_posts() ) : $query->the_post();?>

<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
    <div id="bloc-picto">
        <div class="item-picto">
            <img src="<?php $picto = get_field('picto');if( !empty($picto) ): ?><?php echo $picto['url']; ?><?php else: ?><?php $image_id = get_post_thumbnail_id(); $image_url = wp_get_attachment_image_src($image_id,'icon', true); echo $image_url[0];  ?><?php endif; ?>" width="40px" height="40px">
        </div>
        <div class="legend-picto">
        <b><?php the_title(); ?></b>
            <?php if( get_field('compagnie') ): ?>
            <?php the_field('compagnie'); ?>
            <?php endif; ?>
        <br/>
            <?php if( get_field('acces_star') ): ?>
            <div style="font-size:10px"><?php the_field('acces_star'); ?></div>
            <?php endif; ?>
            <?php if( have_rows('evenement') ): while ( have_rows('evenement') ) : the_row(); ?>
            <?php $post_object = get_sub_field('lieu_evenement');if( $post_object ):
            $post = $post_object; setup_postdata( $post ); ?>
                <i><?php the_title(); ?></i>
            <?php wp_reset_postdata();  ?>
            <?php endif; ?>
            <?php endwhile; ?>
            <?php endif; ?>
        </div>
    </div>
</a>

<?php wp_reset_postdata(); ?>
<?php endwhile; else: ?>
<?php endif; ?>

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,即在将一个查询嵌套在另一个查询中时,have_rows() 循环仅返回第一个布局。

我的解决方案是在每次布局后重新定义 $post 变量。例如:

$post = 123;

setup_postdata( $post );

if ( have_rows( 'components' ) ) {
   while ( have_rows( 'components' ) ) {
      the_row();
      $course_tmpl_name = str_replace( '_', '-', get_row_layout() );
      // include your layout php here
      $post = 123; // redefine $post
   }
}   

wp_reset_postdata();