如何在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
相关产品推荐
相关产品推荐

