我发现了这个问题:
Wordpress outside loop sort by category and time
但问题或答案中没有提供很多背景知道它是否适用于我。我正在使用流行的创世纪框架和儿童主题。我不想修改任何核心WP文件,因为它们会在更新时被覆盖。我想这可以通过我的functions.php或front-page.php文件来完成。
我一次列出25个帖子。在这25个帖子中,我希望任何来自第一类的帖子都列在顶部,而第二类的帖子则列在后面。在第一类和第二类循环中,帖子将按正常进入时间列出。
最好的方法是什么?
答案 0 :(得分:0)
SDS 你需要两个循环一个用于类别,一个用于帖子。 所以你可以尝试这种类型的代码
/*category args for listed according to name in assending order*/
$category_arg = array(
'orderby' => 'name',
'order' => 'ASC'
);
$all_cat = get_categories($category_arg);
/*Loop for all category*/
foreach ($all_cat as $key => $cat) {
/*Query for post of perticular category with orderby posted date*/
$args = array(
'cat' => $cat->cat_ID,
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
) ;
query_posts( $args );
echo '
<div class="one-category-block">
<h1>'.$cat->cat_name.'</h1>';
echo '<ul>';
while ( have_posts() ) : the_post();
echo '<li>';
the_title();
echo '</li>
';
endwhile;
echo '</ul>
</div>';
wp_reset_query();
}
尝试这种类型的代码,然后让我知道结果。 感谢
答案 1 :(得分:0)
好的。你不能直接在查询上做到这一点,我很害怕。
但是,它仍然很容易做到。首先,将查询中的帖子放入数组中:
$posts = array();
while ( have_posts() ) {
the_post();
array_push($posts, $post);
}
然后对该数组进行排序:
usort($posts, function($a, $b) {
if(has_term("mycategory", "mytaxonomy", $a->ID) && !has_term("mycategory", "mytaxonomy", $b->ID)) return -1;
if(!has_term("mycategory", "mytaxonomy", $a->ID) && has_term("mycategory", "mytaxonomy", $b->ID)) return 1;
return $b->post_date - $a->post_date;
});
我已经做到这一点,以便mycatgegory
分类中mytaxonomy
的帖子位于首位,但通常按发布日期排序。
然后只需使用常规的foreach循环来迭代(现已排序的)帖子
foreach($posts as $post) {
setup_postdata($post);
// continue outputting the posts here
}
wp_reset_postdata();
setup_postdata()
确保您可以在不更改代码的情况下使用get_the_ID(),get_permalink()等等。