如何在ACF foreach循环中获取WordPress博客文章发布日期?
解决WordPress循环中获取主文章发布日期的问题
问题核心是你在遍历team自定义文章类型的foreach里,用了as $post变量,覆盖了外层post类型循环的全局$post对象,导致get_the_date调用的是team文章的日期。下面给两种简单的解决方法:
方法一:提前保存主文章ID
在进入foreach循环前,先把当前post类型文章的ID存起来,之后直接用这个ID调用get_the_date:
<?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 10, 'orderby' => 'date', 'order' => 'DESC' // 注意你原来写的DSC是笔误,正确为DESC ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $current_post_id = get_the_ID(); // 保存当前post类型文章的ID $postAuthors = get_field('select_post_author'); // ACF文章对象 - 自定义文章类型team if( $postAuthors ): ?> <?php foreach( array_slice($postAuthors, 0, 1) as $post): ?> <div class="post-date"> <span> <?php // 传入保存好的主文章ID,获取正确的发布日期 echo get_the_date('M d, Y', $current_post_id); ?> </span> </div><!-- /.post-date --> <?php endforeach; ?> <?php endif; ?> <?php endwhile; wp_reset_postdata(); ?>
方法二:避免覆盖全局$post变量
把foreach里的变量名从$post改成其他名称(比如$team_member),这样就不会覆盖外层的$post对象,get_the_date会默认使用当前post类型文章的信息:
<?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 10, 'orderby' => 'date', 'order' => 'DESC' // 修正笔误 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); $postAuthors = get_field('select_post_author'); // ACF文章对象 - 自定义文章类型team if( $postAuthors ): ?> <?php foreach( array_slice($postAuthors, 0, 1) as $team_member): ?> <div class="post-date"> <span> <?php // 此时$post还是外层的post类型文章,直接调用即可 echo get_the_date('M d, Y'); ?> </span> </div><!-- /.post-date --> <?php endforeach; ?> <?php endif; ?> <?php endwhile; wp_reset_postdata(); ?>
内容的提问来源于stack exchange,提问作者Yordan Kostadinov
相关产品推荐
相关产品推荐

