
wp query – WP_Query: bagaimana cara mengurutkan semua posting berdasarkan tanggal ketika satu kategori memiliki bidang “tanggal” khusus?
Kami memiliki beberapa ratus postingan yang tersebar di 4 atau 5 kategori dan sejauh ini kami baik-baik saja dalam mengurutkan berdasarkan tanggal publikasi. Kami baru-baru ini menambahkan kategori “Acara” yang memiliki bidang “tanggal” khusus, dan saat melihat semua kiriman, kami ingin semua non-acara diurutkan berdasarkan tanggal publikasi tetapi acara dalam daftar yang sama muncul di tempat yang ditentukan oleh tanggal khusus.
SAYA memikirkan ini membutuhkan kompleks/bersarang meta_query
tapi saya belum pernah menggunakannya sebelumnya dan saya kesulitan memahaminya. Inilah kode yang relevan:
<?php
$selected_category = isset( $_GET['category'] ) ? $_GET['category'] : '';
$selected_tag = isset( $_GET['tag'] ) ? $_GET['tag'] : '';
$past_state = isset( $_GET['past'] ) ? $_GET['past'] : '';
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$today = date( 'Ymd' );
$meta_query = null;
if ( !empty( $selected_category ) && !empty( $selected_tag ) ) {
$tax_query = array();
} else {
$tax_query = null;
}
if ( !empty( $selected_category ) ) {
$tax_query[] = array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $selected_category
);
}
if ( !empty( $selected_tag ) ) {
$tax_query[] = array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => $selected_tag
);
}
if ( $selected_category === 'events' ) {
if ( !empty( $past_state ) ) {
$meta_query = array( array (
'key' => 'date',
'compare' => '<=', // past
'value' => $today
) );
} else {
$meta_query = array( array (
'key' => 'date',
'compare' => '>=', // upcoming
'value' => $today
) );
}
}
if ( $selected_category == 'events' ) {
if ( !empty( $past_state ) ) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 9,
'paged' => $paged,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
'orderby' => 'meta_value',
'meta_key' => 'date',
'order' => 'DESC'
);
} else {
$args = array(
'post_type' => 'post',
'posts_per_page' => 9,
'paged' => $paged,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
'orderby' => 'meta_value',
'meta_key' => 'date',
'order' => 'ASC'
);
}
} else {
$args = array(
'post_type' => 'post',
'posts_per_page' => 9,
'paged' => $paged,
'meta_query' => $meta_query,
'tax_query' => $tax_query,
'orderby' => 'meta_value'
);
}
$query = new WP_Query( $args );
?>
Untuk mengelompokkannya, pengguna mengeklik beberapa tautan navigasi sederhana untuk memilih kategori, yang menyegarkan laman dengan URL yang diperbarui dan kemudian kueri melanjutkan pemfilteran. Apa yang menurut saya perlu terjadi adalah saya perlu menambahkan else
ke if ( $selected_category === 'events' )
pernyataan dan buat semacam $meta_query di sana.
Saya mencoba menambahkan sesuatu seperti ini tetapi pada dasarnya saya tidak tahu cara menjadikan kunci opsional jika itu masuk akal:
if ( $selected_category === 'events' ) {
...
} else {
$meta_query = array(
array(
'key' => 'date',
'compare' => 'EXISTS'
)
);
}