Setelah kita memperbaiki tampilan event di homepage, kita akan perbaiki tampilan event di archive-event.php.
Hal pertama akan diubah adalah tampilan tanggal event, akan diambil dari custom field event date.
<?php
get_header();
?>
<div class="page-banner">
<div class="page-banner__bg-image" style="background-image: url(<?php echo get_theme_file_uri('images/ocean.jpg') ?>);"></div>
<div class="page-banner__content container container--narrow">
<h1 class="page-banner__title">All Events</h1>
<div class="page-banner__intro"><p>Event penting didunia IT</p></div>
</div>
</div>
<div class="container container--narrow page-section">
<?php
while(have_posts()) {
the_post();
?>
<div class="event-summary">
<a class="event-summary__date t-center" href="<?php the_permalink();?>">
<span class="event-summary__month">
<?php
if (get_field('event_date') != NULL) {
$eventDate = DateTime::createFromFormat('d/m/Y', get_field('event_date'));
}else{
$eventDate = DateTime::createFromFormat('d/m/Y', '01/01/2020');;
}
echo $eventDate->format('M');
?>
</span>
<span class="event-summary__day"><?php echo $eventDate->format('d'); ?></span>
</a>
<div class="event-summary__content">
<h5 class="event-summary__title headline headline--tiny"><a href="<?php the_permalink();?>"><?php the_title();?></a></h5>
<p><?php echo wp_trim_words(get_the_content(), 15) ?> <a href="<?php the_permalink();?>" class="nu gray">Learn more</a></p>
</div>
</div>
<?php
}
echo paginate_links();
?>
</div>
<?php
get_footer();
?>
Lalu order event date ASC dan tidak menampilkan event yang sudah berlalu. Secara insting, kita akan membuat custom query pada archive-event.php. Namun ini bukan pendekatan yang tepat. Karena default query yang sudah disediakan oleh WordPress sebagian besar sudah terpenuhi, kita hanya perlu adjust beberapa hal.
Jadi pendekatan yang lebih tepat dengan melakukan adjustment query pada functions.php.
Block if(!is_admin() AND is_post_type_archive(‘event’) AND $query->is_main_query()) untuk memastikan adjustment hanya untuk archive-event.php.
- !is_admin(), untuk memastikan bahwa kita tidak mengubah query pada admin page.
- is_post_type_archive(‘event’), untuk memastikan bahwa ini adalah archive event.
- is_main_query(), untuk memastikan kita hanya mengubah main query, bukan custom query.
function adjust_queries($query){
if(!is_admin() AND is_post_type_archive('event') AND $query->is_main_query()){
$today = date('Ymd');
$query->set('meta_key', 'event_date');
$query->set('orderby', 'meta_value_num');
$query->set('order', 'ASC');
$query->set('meta_query', array(
array(
'key' => 'event_date',
'compare' => '>=',
'value' => $today
)));
}
}
add_action('pre_get_posts', 'adjust_queries');