我有一个wordpress自定义帖子类型"awards",它有一个自定义分类"awardyear "。我试图写一个查询,将列出他们都出来,但组他们按年,并有一年的标题。例如,2010年以来的所有奖项将被组合在一起。以"2010"作为标题。这可能吗?我可以把它们都列出来,但是,它现在列出的都是每年以下的。下面是我当前的查询:
$taxonomy = 'awardyear';
$queried_term = get_query_var($taxonomy);
$terms = get_terms($taxonomy, 'slug='.$queried_term);
$args = array(
'post_type' => 'awards',
'posts_per_page' => -1 ,
'awardyear' => $term->name,
'order_by' => 'awardyear',
'order' => 'ASC'
);
if ($terms) {
foreach($terms as $term) {
echo '<span class="award_year">' . $term->name . '</span> ';
query_posts( $args );
// The Loop
while ( have_posts() ) : the_post();
echo '<li style="list-style: none;">';
echo '<a href="';
the_permalink();
echo '">';
the_title();
echo '</a>';
echo '</li>';
endwhile;
// Reset Query
wp_reset_query();
}
}
示例输出如下:
2010
Award Example Number 1
Award Example Number 2
2011
Award Example Number 1
Award Example Number 2
Award Example Number 3
Award Example Number 4
2012
Award Example Number 1
Award Example Number 2
Award Example Number 3
您的问题是$args['awardyear']
在$term
被定义之前被设置一次,因此它本身是未定义的。将其从$args
的定义中删除,并将$args['awardyear'] = $term->name;
放在foreach
循环的顶部。这样就可以正确地设置每一个过去。
请注意,这样使用query_posts()
通常是不被允许的;
你可能要考虑用另一种方式来做,因为post meta将是一个更好的选择,可以有效地完成你想要的。
尽管无论您是否真的想使用分类法,您都需要基于一个查询来执行,该查询接受分类法列,并且可以从那里显示它。
参考:http://scribu.net/wordpress/sortable-taxonomy-columns.html