我有一个自定义帖子类型,在archive-CPT-name.php
模板文件中显示帖子,需要按年度过滤帖子。当query_var archive
存在时,在循环之前添加以下代码:
global $query_string;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$archive_year = get_query_var('archive', false);
query_posts( $query_string . '&year='.$archive_year.'&paged='.$paged );
这会返回0个帖子。如果我将year='.$archive_year.'
更改为day=16
,保持其他所有内容相同,那么我正确地获取了16日创建的帖子。我也可以成功地按w
和monthnum
进行过滤。它只是year
参数不起作用。
为什么会发生这种情况的任何想法?
编辑:$wp_query->request
包含以下SQL ... WHERE 1=1 AND ( YEAR( wp_posts.post_date ) = 2016 ) AND ( 0 = 1 ) ...
。为什么要包含AND ( 0 = 1 )
?那可能来自哪里?看起来这可能是我问题的原因。
更新:我使用以下代码作为解决方法,但更想弄清楚为什么上述代码不起作用。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$archive_year = get_query_var('archive', false);
$args = array('post_type' => 'repair-post', 'date_query' => array(array('year' => $archive_year)), 'paged' => $paged);
$loop = new WP_Query( $args );
if ($loop->have_posts()) :
while ( $loop->have_posts() ) :
?>