You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 02:21:04