I have a âUpcoming Eventsâ page, and a âPast Eventsâ page. Each event has a custom field called âevent_dateâ.
I want to create a loop that displays all of the events greater than today. I’ve taken a look through these articles, but couldn’t get it to work:
http://support.advancedcustomfields.com/forums/topic/how-do-i-filter-and-sort-event-posts-with-start-and-end-date/
https://wordpress.org/support/topic/plugin-advanced-custom-fields-sorting-by-date-picker
wordpress advanced custom fields order posts by date-picker
From what Iâve gathered in the three links above, I would put this in my functions.php file:
// CREATE UNIX TIME STAMP FROM DATE PICKER
function custom_unixtimesamp ( $post_id ) {
if ( get_post_type( $post_id ) == 'event_type' ) {
$event_date = get_post_meta($post_id, 'event_date', true);
if($event_date) {
$dateparts = explode('/', $event_date);
$newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2])));
update_post_meta($post_id, 'unixstartdate', $newdate1 );
}
}
}
add_action( 'save_post', 'custom_unixtimesamp', 100, 2);
Then I would add something like this to my page template:
<?php
$today = time();
$args = array(
'post_type' => 'event_type',
'posts_per_page' => 5,
'meta_query' => array(
array(
'key' => 'unixstartdate',
'compare' => '>=',
'value' => $today,
)
),
'meta_key' => 'event_date',
'orderby' => 'meta_value',
'order' => 'ASC',
);
$query = new WP_Query( $args );
$event_type = $query->posts;
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
Right now thatâs not turning up any results. My post-type is called âevent_typeâ, and the key is âevent_dateâ.
Any thoughts on where Iâm going wrong?
I found a solution here thanks to svsdnb.
https://wordpress.org/support/topic/query-date-array-to-display-future-events-only
Instead of having to convert the timestamp in functions.php, there is a way to do this specifically with ACF where you use
instead of
Here’s what I’ve ended up with (and it seems to be working, and includes events that happen today):
It looks like you have a few issue with your code. Your date parsing also seems to be incorrect, though it’s hard to say without more info. Using
strtotime
in both the function to setunixstarttime
and your query code would be good. Your code usestime()
which will include the seconds and leave out events for “today”. You have no time zone so everything will be treated as GMT, which is fine as long as you keep that in mind.Not really a big deal, but you are specifying two parameters for your callback in the
add_action
but the function only takes one argument.The next problem is the
have_posts()
loop – you need to specify the custom query$query
to loop over it.I also implemented it a slightly different way using the
updated_{type}_meta
action to only fire on the proper meta key, and then check the post type. It should only run when the meta value is updated rather than every time the post is saved. I would also recommend sorting by theunixstarttime
meta value since it is numeric.functions.php
template page