__( 'Display upcoming events', 'am-events' )), array('width' => 400)); } /** * Front-end display of widget. * * @see WP_Widget::widget() * * @param array $args Widget arguments. * @param array $instance Saved values from database. */ public function widget( $args, $instance ) { extract( $args ); global $post; /* User-selected settings. */ $title = apply_filters('widget_title', $instance['title'] ); $venue = $instance['venue']; $category = $instance['category']; $postcount = $instance['postcount']; $template = $instance['template']; $before = $instance['before']; $after = $instance['after']; /* Before widget (defined by themes). */ echo $before_widget; /* Event category filter args */ $taxCategory = NULL; if ($category !== "all") { $taxCategory = array( 'taxonomy' => 'am_event_categories', 'field' => 'name', 'terms' => $category, ); } /* Venue filter args */ $taxVenue = NULL; if ($venue !== "all") { $taxVenue = array( 'taxonomy' => 'am_venues', 'field' => 'name', 'terms' => $venue, ); } /* WP_Query args */ $args = array( 'post_type' => 'am_event', // show only am_event cpt 'post_status' => 'publish', // show only published 'posts_per_page' => $postcount, // number of events to show 'tax_query' => array( // taxonomy and term filter 'relation' => 'AND', $taxCategory, $taxVenue, ), // sort by meta value 'am_startdate' ascending 'meta_key' => 'am_startdate', 'orderby' => 'meta_value', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'am_enddate', // display events with an end date greater than // the current time - 24hrs 'value' => date('Y-m-d H:i:s', time() - (60 * 60 * 24)), 'compare' => ">" // startdate > value ), ), ); /* Title of widget (before and after defined by themes). */ if ( ! empty( $title ) ) echo $before_title . $title . $after_title; echo $before; $loop = new WP_Query( $args ); while ($loop->have_posts()) { $loop->the_post(); $post_id = get_the_ID(); // get post meta $meta_venues = wp_get_post_terms( $post_id, 'am_venues' ); $meta_event_categories = wp_get_post_terms( $post_id, 'am_event_categories' ); $meta_startdate = get_post_meta($post_id, 'am_startdate', true); $meta_enddate = get_post_meta($post_id, 'am_enddate', true); // get timestamps of dates $timestamp_start = strtotime($meta_startdate); $timestamp_end = strtotime($meta_enddate); //get all the widget template data $template_startdate = date(_x('m/d/Y', 'upcoming events widget', 'am-events'), $timestamp_start); $template_enddate = date(_x('m/d/Y', 'upcoming events widget', 'am-events'), $timestamp_end); $template_starttime = date( _x('H:i', 'upcoming events widget', 'am-events'), $timestamp_start); $template_endtime = date( _x('H:i', 'upcoming events widget', 'am-events'), $timestamp_end); $template_startdayname = getWeekDay(date('N', $timestamp_start)); $template_enddayname = getWeekDay(date('N', $timestamp_end)); $template_venue = $meta_venues[0]->name; $template_event_category = $meta_event_categories[0]->name; $template_title = get_the_title(); // Widget template tags $search = array( '{{start_day_name}}', '{{start_date}}', '{{start_time}}', '{{end_day_name}}', '{{end_date}}', '{{end_time}}', '{{title}}', '{{event_category}}', '{{venue}}', ); $replace = array( $template_startdayname, $template_startdate, $template_starttime, $template_enddayname, $template_enddate, $template_endtime, $template_title, $template_event_category, $template_venue, ); $output = str_replace($search, $replace, $template); echo $output; } echo $after; /* After widget (defined by themes). */ echo $after_widget; } /** * Back-end widget form. * * @see WP_Widget::form() * * @param array $instance Previously saved values from database. */ public function form( $instance ) { $default_template = '

{{title}}

{{start_day_name}} {{start_date}} {{start_time}} - {{end_day_name}} {{end_date}} {{end_time}}

{{event_category}}

{{venue}}

'; $defaults = array( 'title' => __('Upcoming Events', 'am-events'), 'category' => 'all', 'venue' => 'all', 'postcount' => '3', 'template' => $default_template, 'after' => '

' . __('See More Events ->', 'am-events') . '

', 'before' => '' ); $instance = wp_parse_args( (array) $instance, $defaults ); $title = $instance[ 'title' ]; $category = $instance[ 'category' ]; $venue = $instance[ 'venue' ]; $template = $instance[ 'template' ]; $before = $instance[ 'before' ]; $after = $instance[ 'after' ]; $args = array( 'hide_empty' => false ); $types = get_terms('am_event_categories', $args); $venues = get_terms('am_venues', $args); ?>