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,那将不起作用。
在我的主页上,我想按日期顺序显示最新的新项目(标准 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,那将不起作用。