Reputation: 444
I need to display the upcoming events for next 30 Days and sort the same based on custom date field.
Below is the code I am using right now but not got any success in hiding old Events and restricting events to 30 Days.
<?php
$todayDate = date('d F, Y');
$futureDate = strtotime ( '+30 days' , strtotime ( $todayDate ) ) ;
$futureDate = date ( 'd F, Y' , $futureDate );
$eventsOpt = array(
'post_type' => 'ptype_events',
'posts_per_page' => -1,
'meta_key' => 'ptype_event_date',
'meta_compare' => '>=',
//'meta_value' => $todayDate,
'orderby' => 'meta_value',
'order' => 'ASC',
);
$events_query = new WP_Query($eventsOpt);
?>
<div class="eventsPosts">
<?php while ($events_query->have_posts()) : $events_query->the_post();
$date = get_post_meta($post->ID, 'ptype_event_date', true);
?>
<div class="eventsPost clearfix">
<h3 class="title">
<?php the_title()?>
</h3>
Date: <?php echo $date ?> </div>
<?php endwhile; ?>
<?php wp_reset_query() ?>
</div>
Note: Date saved in database is in this format date('d F, Y')
and I cannot change it to timestamp while saving because creating meta-fields using a plugin.
Please help me out.
Regards
Upvotes: 0
Views: 701
Reputation: 11852
If dates are stored as a formatted text string, you'll need to convert them back to a date, then filter and sort them. My guess is that when you run this code, an event on 03 June will show before a date on 30 January.
Here's how I would approach this:
<?php
//Get all the events
$eventsOpt = array(
'post_type' => 'ptype_events',
'posts_per_page' => -1,
'meta_key' => 'ptype_event_date',
'orderby' => 'meta_value',
'order' => 'ASC',
);
$events_query = new WP_Query($eventsOpt);
//Loop through them and filter out events before today and events in more than 1 month
$events_out = array();
while ($events_query->have_posts()) : $events_query->the_post();
$ed = strtotime( get_post_meta($post->ID, 'ptype_event_date', true) );
$temp = array();
if ( $ed !== FALSE && $ed >= time() && $ed <= strtotime('+1 month') ) :
$temp['date'] = date('d F, Y', $ed);
$temp['title'] = get_the_title();
$events_out[$ed] = $temp;
endif;
endwhile;
wp_reset_query();
//Sort the events by date
ksort( $events_out );
//Write the output
$format = <<<EOF
<div class="eventsPost clearfix">
<h3 class="title">
%s
</h3>
Date: %s </div>
EOF;
foreach ($events_out as $event) {
printf ($format, $event['title'], $event['date']);
} ?>
Upvotes: 1