Wordpess Timber - объединить $ context, чтобы получить два пост-типа? - PullRequest
0 голосов
/ 10 марта 2020

На моей домашней странице я хотел бы показать самые последние новинки (стандартные «посты» Wordpress) ИЛИ события (пользовательский пост-тип) в порядке дат. У меня есть следующее введение каждого типа контента, но я получаю все события в порядке дат; затем следуют все новостные элементы в порядке дат - то, что я хочу, это Новости ИЛИ События в порядке дат, поэтому, если самым новым элементом является событие, то это то, что идет первым, затем следует новостной элемент, затем следует событие, если необходимо, и так на. Я предполагаю, что есть какой-то способ объединить контекст?

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

Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 14 марта 2020

Если вы хотите объединить два запроса, а затем отсортировать их, вы можете сначала объединить результаты запроса в один массив, который вы затем сортируете с помощью 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 );
* 1006. * Затем вы можете l oop через этот массив пользовательских постов в Twig
{% for post in posts %}
    {# Display post teaser #}
{% endfor %}

Я бы ограничил количество постов, которые вы выбираете для каждого из запросов.

Это хорошо работает, если количество опубликованных постов и событий примерно одинаково во времени. Однако вы можете завершить показ только событий или постов, если самые новые посты относятся только к одному типу.

Чтобы обойти это, вы можете, например, выбрать только 3 поста каждого типа постов, чтобы сделать его общим из 6. Вы по-прежнему можете использовать wp_list_sort(), но таким образом у вас будет отображаться как минимум 3 типа сообщений каждого типа.

Вы также можете попробовать использовать более одного типа сообщения для аргумента post_type в WP_Query - он принимает массив типов сообщений, но, думаю, это не сработает, если вы захотите включить сообщения только из категории признакам .

...