Wordpress Timber - 合并 $context 以获得两个 post 类型?

Wordpess Timber - combine $context to get two post-types?

在我的主页上,我想按日期顺序显示最新的新项目(标准 Wordpress 'posts')或事件(自定义 post 类型)。我在每种内容类型中引入了以下内容,但我得到的是按日期顺序排列的所有事件;然后是按日期顺序排列的所有新闻项目——我想要的是按日期顺序排列的新闻或事件,所以如果最新的项目是一个事件,那么它就是最先出现的,然后是一个新闻项目,如果需要的话再接着是一个事件等等上。我假设有一些方法可以结合上下文?

<?php

$context          = Timber::context();
$context['home_page_content'] = new Timber\PostQuery('post_type=vopthomepage');

// below are the two I want to combine

$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);

Timber::render( 'index.twig', $context );

非常感谢任何帮助!

如果您想合并两个查询然后对它们进行排序,您可以先将查询结果合并到一个数组中,然后使用 wp_list_sort().

排序
<?php

$context = Timber::context();

$context['home_page_content'] = new Timber\PostQuery('post_type=vopthomepage');

$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 );

$context['posts'] = $posts;

Timber::render( 'index.twig', $context );

然后您可以循环遍历 Twig

中自定义构建的 posts 数组
{% for post in posts %}
    {# Display post teaser #}
{% endfor %}

我会做的是限制您为每个查询获取的 post 的数量。

如果已发布的 post 数量和事件数量随着时间的推移大致相同,则此方法效果很好。但是,如果最新的 post 仅来自一种类型,则您可以只显示事件或 post。

要解决这个问题,您可以例如只获取每个 post 类型的 3 posts 使它总共有 6 个。你仍然可以使用 wp_list_sort(),但这样你至少会得到每个 post 的 3 个] 类型显示。

你也可以尝试为 WP_Query 中的 post_type 参数使用多个 post 类型——它接受一个 post 类型的数组,但我猜如果您只想包含来自 featured 类别的 posts,那将不起作用。