Di beranda saya, saya ingin menampilkan item baru terbaru ('posting' Wordpress standar) ATAU acara (tipe posting khusus) dalam urutan tanggal. Saya memiliki yang berikut ini membawa setiap jenis konten, tetapi yang saya dapatkan adalah semua acara dalam urutan tanggal; diikuti oleh semua item berita dalam urutan tanggal - yang saya inginkan adalah Berita ATAU Acara dalam urutan tanggal, jadi jika item terbaru adalah Acara, maka itu yang didahulukan, diikuti oleh item Berita, diikuti menjadi Acara jika perlu dan seterusnya pada. Saya berasumsi ada beberapa cara untuk menggabungkan konteksnya?

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

Bantuan apa pun sangat dihargai!

0
iain-g 10 Maret 2020, 18:07

1 menjawab

Jawaban Terbaik

Jika Anda ingin menggabungkan dua kueri dan kemudian mengurutkannya, Anda dapat menggabungkan hasil kueri terlebih dahulu ke dalam satu larik yang kemudian Anda urutkan dengan 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 );

Anda kemudian dapat mengulang melalui array posting yang dibuat khusus di Twig

{% for post in posts %}
    {# Display post teaser #}
{% endfor %}

Apa yang akan saya lakukan adalah membatasi jumlah posting yang Anda ambil untuk setiap kueri.

Ini berfungsi dengan baik jika jumlah posting dan acara yang diterbitkan hampir sama dari waktu ke waktu. Namun, Anda dapat mengakhiri dengan hanya acara atau posting yang muncul, jika posting terbaru hanya dari satu jenis.

Untuk mengatasinya, Anda bisa mis. hanya ambil 3 posting dari setiap jenis posting untuk menjadikannya total 6. Anda masih bisa menggunakan wp_list_sort(), tetapi dengan cara itu Anda akan memiliki setidaknya 3 dari setiap jenis posting yang ditampilkan.

Anda juga dapat mencoba menggunakan lebih dari satu jenis kiriman untuk argumen post_type di WP_Query – ia menerima larik jenis kiriman, tetapi saya rasa itu tidak akan berhasil jika Anda hanya ingin memasukkan kiriman dari kategori unggulan.

0
Gchtr 15 Maret 2020, 10:13