Display custom post types by date field

I have a custom post type that is simply titles with a date field. I want to display these posts in a list in order of this date field (not date posted). So simply:

Read More

Sample date

Event title 1
Event title 2

Sample date

Event title 3
Event title 4
Event title 5

(etc)

No extra info, that’s literally all I want to display.

I can’t figure out how to go about this at all. I’m not great at PHP so I’d appreciate any help with this.

Related posts

2 comments

  1. I solved the same problem like this
    First you store each posts in another array called $events_by_date with date as the index. If another event post falls in the same date you put that post under the same index.

    Please comment if you need further explanation.

      <?php
    //setup your wp_query parmeters to make the query
    
    $calendar_results   =   new WP_Query( $wp_query_params );
    
    $events_by_date = array();
    
    
         while ( $calendar_results->have_posts() ) : $calendar_results->the_post(); 
            //$date_group =  strtotime($calendar_results->post->post_date);
            $date_group = strtotime(date('Y-m-d',$date_group));
            $events_by_date[$date_group][] = $calendar_results->post;
        endwhile;
    
    global $post;
    
    
    foreach($events_by_date as $date_heading=>$rows) {
    
        echo '<h2 class="published-date">',
                ucfirst( strftime( '%A %d %b',$date_heading ) ) ,
        '</h2>';
    
        foreach ($rows as $post ) {
            setup_postdata($post) ;
            get_template_part( 'content', $template ); 
        }
    
    
    }   
    
    wp_reset_query();
    
  2. Just use WP_Query like this:

    $posts_by_date_field = new WP_Query(array(
        'post_type'         => 'POST_TYPE_NAME',
        'posts_per_page'    => -1,
        'meta_key'          => 'FIELD_NAME',
        'orderby'           => 'meta_value',
        'order'             => 'DESC'
    ));
    
    
    if ($posts_by_date_field->have_posts()) : while ($posts_by_date_field->have_posts()) : $posts_by_date_field->the_post();
    
        // LOOP
    
    endwhile; endif;
    

Comments are closed.