在我的主页上,我想按日期顺序显示最近的新项目(标准的Wordpress'帖子')或事件(自定义帖子类型)。我将以下内容引入每种内容类型,但是得到的是按日期顺序排列的所有事件;其次是按日期顺序排列的所有新闻项-我想要的是按日期顺序排列的新闻或事件,因此,如果最新的项是事件,则首先是事件,其次是新闻项,必要时是事件,依此类推上。我认为有某种方式可以组合上下文?
$eventArgs = array(
'post_type' => 'mec-events',
'posts_per_page' => -1,
'orderby' => array(
'date' => 'DESC'
));
$context['mec_events'] = new Timber\PostQuery($eventArgs);
$postArgs = array(
'post_type' => 'post',
'posts_per_page'=> -1,
'category_name' => 'featured',
'orderby' => array(
'date' => 'DESC'
));
$context['featured_items'] = new Timber\PostQuery($postArgs);
任何帮助,不胜感激!
如果要合并两个查询然后对其进行排序,可以先将查询结果合并到单个数组中,然后使用wp_list_sort()
进行排序。
wp_list_sort()
我要做的是限制您为每个查询获取的帖子数量。
如果发布的帖子和事件的数量随时间推移大致相同,则效果很好。但是,如果最新的帖子仅来自一种类型,则可以仅显示事件或帖子。
要解决此问题,您可以例如每种类型的帖子仅提取3个帖子,因此总共只有6个帖子。您仍然可以使用<?php
$eventArgs = [
'post_type' => 'mec-events',
'posts_per_page' => 10,
'orderby' => [
'date' => 'DESC',
],
];
$postArgs = [
'post_type' => 'post',
'posts_per_page' => 10,
'category_name' => 'featured',
'orderby' => [
'date' => 'DESC',
],
];
$events = new Timber\PostQuery( $eventArgs );
$featured_items = new Timber\PostQuery( $postArgs );
$posts = array_merge( $events->get_posts(), $featured_items->get_posts() );
$posts = wp_list_sort( $posts, 'post_date', 'DESC' );
// Restrict to certain amount of items.
$posts = array_slice( $posts, 0, 6 );
,但这样一来,您将至少显示3个每种帖子类型。
[您也可以尝试为wp_list_sort()
中的post_type
参数使用多个发布类型–它接受一系列发布类型,但我想如果您只想包含< [精选类别。