Wordpress如何按ACF的year字段分组输出文章并以年份为标题
实现方案
你可以参考以下完整代码实现按年份分组输出的效果,已经在原有代码基础上做了兼容修改:
<?php $args = array( 'posts_per_page' => -1, // 原numberposts是get_posts的参数,WP_Query建议用posts_per_page 'post_type' => 'artikel', 'meta_key' => 'year', // 新增:指定排序用的自定义字段 'orderby' => 'meta_value_num', // 新增:按字段的数值类型排序 'order' => 'ASC', // 新增:排序规则 从早到晚填ASC 从晚到早填DESC 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'year', 'compare' => 'EXISTS' ), array( 'key' => 'year', 'value' => 1900, 'type' => 'NUMERIC', 'compare' => '>' ) ) ); $the_query = new WP_Query( $args ); ?> <?php if( $the_query->have_posts() ): ?> <?php $prev_year = ''; // 记录上一个分组的年份 while( $the_query->have_posts() ) : $the_query->the_post(); $current_year = get_field('year'); // 获取当前文章的年份值 // 判断是否需要开启新的年份分组 if( $current_year != $prev_year ): // 如果不是第一个分组,先闭合上一个分组的ul标签 if( $prev_year != '' ) echo '</ul>'; ?> <p><strong><?php echo esc_html($current_year); ?></strong></p> <ul> <?php $prev_year = $current_year; // 更新当前分组年份 endif; ?> <li><a href="<?php echo esc_url(get_permalink()); ?>"><?php echo esc_html(get_the_title()); ?></a></li> <?php endwhile; ?> </ul> <!-- 闭合最后一个分组的ul标签 --> <?php endif; wp_reset_postdata(); // 重置查询数据 避免污染全局post变量 ?>
核心逻辑说明
- 新增的排序配置是为了让同一年份的文章连续排列,保证分组逻辑正常
- 遍历过程中通过比对当前文章年份与上一个输出的分组年份,判断是否需要输出新的分组标题
- 所有输出内容都加了WordPress内置的转义函数,保证输出安全
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

