Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function list_events_by_date() {
- // vars
- $r = '';
- $start_date = '';
- $multi_day_events = array();
- // get all events
- $events = get_posts( array(
- 'order' => 'ASC',
- 'numberposts' => -1,
- // 'post_type' => 'events',
- 'meta_key' => 'start date',
- 'orderby' => 'meta_value_num'
- )
- );
- // if there are any events
- if ( $events ) {
- // get the start date of the first event
- $start_date = strtotime( get_post_meta( $events[0]->ID, 'start date', true ) );
- // begin building output
- $r .= '<h2>' . strftime( '%B %e, %Y', $start_date ) . '</h2>';
- $r .= '<ul class="events-list">';
- // loop events
- foreach ( $events as $post ) {
- // re-assign start date variable
- $old_start_date = $start_date;
- // get the start and end dates of the current event
- $start_date = get_post_meta( $post->ID, 'start date', true );
- $end_date = get_post_meta( $post->ID, 'end date', true );
- // convert them to timestamps
- $start_date = $start_date != '' ? strtotime( $start_date ) : $start_date;
- $end_date = $end_date != '' ? strtotime( $end_date ) : $start_date;
- /**
- * process current event
- */
- // check wether we're at a new date
- if( $start_date != $old_start_date ) {
- // start a new section for new date
- $r .= '</ul>';
- $r .= '<h2>' . strftime( '%B %e, %Y', $start_date ) . '</h2>';
- $r .= '<ul class="events-list">';
- }
- // HTML for each event
- $event_html = '<li><a href="' . get_permalink( $post->ID ) . '">' . get_the_title( $post->ID ) . '</a></li>';
- $r .= $event_html;
- // compare start and end date of current event (is it a multi-day event?)
- if ( ( $start_date < $end_date ) && ( $end_date != '' ) ) {
- // save event for further looping
- $multi_day_events[] = array (
- 'ID' => $post->ID,
- 'start_date' => $start_date,
- 'end_date' => $end_date,
- 'html' => $event_html,
- );
- }
- }
- $r .= '</ul>';
- // echo/return the result
- echo $r;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment