首页 > 解决方案 > Wordpress 查询仅显示子转发器的第一个元素

问题描述

我正在尝试从另一个 wordpress 页面遍历所有高级自定义字段帖子对象。该循环仅输出第一个后对象(事件)。

也许我没有正确使用reset_postdata?关于我可能做错了什么的任何想法?

感谢您的任何建议。

<?php $your_query = new WP_Query( 'pagename=events' );
while ( $your_query->have_posts() ) : $your_query->the_post(); ?>
<?php if( have_rows('events') ): ?>
    <?php while ( have_rows('events') ) : the_row(); ?>
        <?php if( get_row_layout() == 'single-event' ): ?>

            <?php $post_object = get_sub_field('event');
            if( $post_object ): 
                $post = $post_object;
                setup_postdata( $post ); ?>
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                <?php wp_reset_postdata(); ?>
            <?php endif; ?>

        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

标签: phpwordpressadvanced-custom-fields

解决方案


我建议你的第一行修改如下..

<?php $your_query = new WP_Query( 
                          array(
                           'posts_per_page'   => -1,
                           'post_type' => 'events',
                           ));

如果要放置 wp_reset_postdata(),则应将其放在 while 循环之外。

<?php while ( $your_query->have_posts() ) : $your_query->the_post(); ?>
<?php if( have_rows('events') ): ?>
<?php while ( have_rows('events') ) : the_row(); ?>
    <?php if( get_row_layout() == 'single-event' ): ?>
        <?php $post_object = get_sub_field('event');
          if( $post_object ): 
            setup_postdata( $GLOBALS['post'] =& $post_object );
          ?>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        <?php endif; ?>

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

推荐阅读