Matt Jones Tech
  • Blog
  • Video Projects
  • Web Projects
  • Using WP_Query() to sort datetime meta_value

    Just like the title suggests, I’ve spent the last several hours struggling with meta_query to return CPTs based on some datetime picker meta_value. Let me explain my setup.

    I’m writing a plugin that stores data from a custom_post_type for gym classes with a handful of custom fields put into place using ACF. One of those custom fields is gym_class_date which contains the output from a jQuery datetime picker. Here’s a look at my broken code:

     $today = date(‘Ymd H:i:s’);
    
     
    
    
     $MJCalendar = new WP_Query(array(
    
     ‘post_type’ => ‘gym_class’,
    
     ‘posts_per_page’ => –1,
    
     ‘meta_key’ => ‘gym_class_date’,
    
     ‘orderby’ => ‘meta_value’,
    
     ‘order’ => ‘ASC’,
    
     //only return upcoming classes, not classes in the past
    
     ‘meta_query’ => array(
    
     array(
    
     ‘key’ => ‘gym_class_date’,
    
     ‘compare’ => ‘>=’,
    
     ‘value’ => $today,
    
     )
    
     )
    
     ));
    
     
    
    
     while($MJCalendar->have_posts()) {
    
     $MJCalendar->the_post();

    When I ran the code, the resulting output was… nothing. So what gives?

    I burned an entire Sunday scratching my head over this and I finally figured it out. Here was my problem:

    ACF always stores datetime values in an EXTREMELY specific way: 'YYYY-MM-DD HH:ii:ss'. And I mean specific. Even though earlier in my code, I defined $today = date('Ymd H:i:s');… it was just wrong enough to break literally everything. Turns out, 20210116 16:37:24 does NOT equal 2021-01-16 16:37:24.

    Adding some simple dashes to my $today = date('Y-m-d H:i:s'); declaration made everything magically start working again.

    That’s gonna do it for this post, I know it’s a bit of a short one, but it took me FOREVER to figure out this stupid detail. Note to self, and hopefully to you, when you’re comparing two  datetime values with a meta_query, for Pete’s sake, make absolutely sure that your format is perfectly the exact same as the format coming from the database. Otherwise, none of your comparison operators will work.

    matt

    January 8, 2021
    Web Design, Web Development
    code, php, wordpress, wp_query()

Prove all things; hold fast that which is good. 1 Thess 5:21