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

如何在WordPress中按年份筛选文章?以及如何通过自定义字段按年份筛选文章(附代码示例)

1. 如何在WordPress平台中按年份对文章进行筛选?

根据需求不同,有几种实用的实现方式:

方法一:利用WordPress内置日期归档功能

WordPress自带日期归档机制,你可以直接使用:

  • 访问站点URL + /年份/ 即可查看对应年份的所有文章,比如 https://你的域名.com/2021/
  • 如果要在页面添加年份筛选下拉框,可在主题模板文件(如sidebar.php或自定义页面模板)中使用wp_get_archives()函数:
<select name="year-filter" onchange="window.location.href=this.value;">
    <?php wp_get_archives(array(
        'type' => 'yearly',
        'format' => 'option',
        'show_post_count' => true // 显示该年份的文章数量
    )); ?>
</select>

这段代码会生成包含所有有文章年份的下拉菜单,选择后自动跳转到对应年份的归档页面。

方法二:自定义WP_Query实现页面内筛选

如果需要在自定义页面直接展示筛选后的文章,而非跳转归档页,可以用WP_Query配合date_query参数:

$args = array(
    'post_type' => 'post', // 可替换为自定义文章类型,比如'page'或'movies'
    'posts_per_page' => -1, // 显示所有符合条件的文章
    'date_query' => array(
        array(
            'year' => 2021, // 指定要筛选的年份
        ),
    ),
);

$query = new WP_Query($args);

// 循环输出文章内容
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h2><a href="' . get_permalink() . '">' . get_the_title() . '</a></h2>';
    }
    wp_reset_postdata(); // 重置查询上下文
}

2. 如何通过自定义字段按年份筛选文章?

你提供的示例代码没有精准定位到年份筛选,以下是针对自定义日期字段(如release_date)的正确实现方式:

方法一:针对YYYY-MM-DD格式的日期字段

如果你的自定义字段存储的是标准YYYY-MM-DD格式日期,可以用meta_query的BETWEEN比较符筛选全年范围:

$args = array(
    'post_type' => 'movies',
    'posts_per_page' => 28, // 注意:旧参数`showposts`已被`posts_per_page`替代
    'meta_query' => array(
        array(
            'key' => 'release_date',
            'value' => array('2021-01-01', '2021-12-31'),
            'compare' => 'BETWEEN',
            'type' => 'DATE', // 指定字段类型为日期,确保比较逻辑正确
        ),
    ),
);

$query = new WP_Query($args);

// 输出筛选结果
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h3>' . get_the_title() . '</h3>';
        echo '<p>上映日期:' . get_post_meta(get_the_ID(), 'release_date', true) . '</p>';
    }
    wp_reset_postdata();
}

方法二:提取年份筛选(适用于非标准格式)

如果自定义字段仅存储年份,或需要从非标准格式中提取年份,可使用正则匹配:

$target_year = 2021;

$args = array(
    'post_type' => 'movies',
    'posts_per_page' => 28,
    'meta_query' => array(
        array(
            'key' => 'release_date',
            'value' => '^' . $target_year, // 匹配以目标年份开头的内容
            'compare' => 'REGEXP',
        ),
    ),
);

$query = new WP_Query($args);

注意:正则匹配在数据量较大时性能不如BETWEEN方法,优先推荐第一种方案。

内容的提问来源于stack exchange,提问作者Ruan Cabral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:37:38