public static function event_microdata($arg_post = null, $echo = true, $next_upcoming = false) { global $post; ob_start(); $p = is_null($arg_post) ? $post : $arg_post; ?> <div itemscope itemtype="http://schema.org/Event"><?php ?> <meta itemprop="name" content="<?php the_title(); ?> "><?php ?> <meta itemprop="url" content="<?php echo get_permalink($p->ID); ?> "><?php if (isset($_REQUEST['event_rdate']) && '' != $_REQUEST['event_rdate']) { $arr = explode(',', $_REQUEST['event_rdate']); $event_start = $arr[0]; $event_end = $arr[1]; } else { if ($next_upcoming) { global $wpdb; $sql = "SELECT event_start, event_end FROM `{$wpdb->prefix}rhc_events` WHERE post_id={$p->ID} AND event_start>NOW() ORDER BY event_start ASC LIMIT 1;"; $event_start = $wpdb->get_var($sql, 0, 0); $event_end = $wpdb->get_var($sql, 1, 0); if (empty($event_start) || empty($event_end)) { $event_start = get_post_meta($p->ID, 'fc_start_datetime', true); $event_end = get_post_meta($p->ID, 'fc_end_datetime', true); } } else { $event_start = get_post_meta($p->ID, 'fc_start_datetime', true); $event_end = get_post_meta($p->ID, 'fc_end_datetime', true); } } $ts_start = strtotime($event_start); $ts_end = strtotime($event_end); if ($ts_end < $ts_start) { $ts_end = $ts_start; } $start = date('Y-m-d\\TH:i:s', $ts_start); $end = date('Y-m-d\\TH:i:s', $ts_end); ?> <meta itemprop="startDate" content="<?php echo esc_attr($start); ?> "><?php ?> <meta itemprop="endDate" content="<?php echo esc_attr($end); ?> "><?php //venues $venues = wp_get_post_terms($p->ID, RHC_VENUE, array()); if (is_array($venues) && count($venues) > 0) { foreach ($venues as $v) { rhc_template_frontend::venue_microdata($v); } } //organizers $organizers = wp_get_post_terms($p->ID, RHC_ORGANIZER, array()); if (is_array($organizers) && count($organizers) > 0) { foreach ($organizers as $organizer) { rhc_template_frontend::organizer_microdata($organizer); } } ?> </div><?php $output = ob_get_contents(); if (!$echo) { ob_end_clean(); } return $output; }
function handle_static_event_list($atts, $post_types, $events_source_query, $noscript) { global $wpdb, $rhc_plugin, $wp_query; if ('1' == $rhc_plugin->get_option('disable_static_list', false, true)) { return ''; } if ($this->list_printed) { return ''; } $this->list_printed = true; //--- $slug_upcoming = $rhc_plugin->get_option('enable_static_list_upcoming_slug', 'rhc-upcoming-events', true); $slug_past = $rhc_plugin->get_option('enable_static_list_past_slug', 'rhc-past-events', true); //echo "slug up $slug_upcoming:" . (get_query_var( $slug_upcoming ))."<br>"; //echo "slug past $slug_past:" . (get_query_var( $slug_past ))."<br>"; $up_qvar = get_query_var($slug_upcoming); $past_qvar = get_query_var($slug_past); if (!empty($up_qvar)) { $page = intval($up_qvar); $direction = 1; } else { if (!empty($past_qvar)) { $page = intval($past_qvar); $direction = 0; } else { $page = 0; $direction = 1; } } //---- //---- $microdata = ''; $out = '1' == $noscript ? '<noscript>' : ''; $dir = $direction > 0 ? '>=' : '<'; $order_dir = $direction == 0 ? 'DESC' : 'ASC'; $limit = intval($rhc_plugin->get_option('static_list_limit', 50, true)); //$limit = isset($_REQUEST['limit'])?intval($_REQUEST['limit']):$limit; $offset = $page * $limit; $now = date('Y-m-d 00:00:00'); $sql = "SELECT DISTINCT(E.post_id)\n\t\tFROM `{$wpdb->prefix}rhc_events` E \n\t\tWHERE E.event_start {$dir} '{$now}'\n\t\tGROUP BY E.post_id\n\t\tORDER BY E.event_start {$order_dir}\n\t\tLIMIT {$limit} OFFSET {$offset}"; $post_ids = $wpdb->get_col($sql, 0); $haveposts = false; if (is_array($post_ids) && count($post_ids) > 0) { $haveposts = true; $args = array('post_type' => $post_types, 'post__in' => $post_ids, 'post_status' => 'publish', 'numberposts' => -1, 'orderby' => 'post__in', 'ignore_sticky_posts' => true); parse_str($events_source_query, $params); foreach (array('tax', 'taxonomy', 'terms', 'calendar', 'venue', 'organizer', 'author', 'author_name', 's') as $field) { ${$field} = isset($params[$field]) ? $params[$field] : false; } $taxonomies = array(); if (false !== $tax && is_array($tax) && count($tax) > 0) { foreach ($tax as $slug => $terms) { $taxonomies[$slug] = explode(',', str_replace(' ', '', $terms)); } } else { if (false !== $taxonomy && false !== $terms) { $taxonomies[$taxonomy] = explode(',', str_replace(' ', '', $terms)); } if (false !== $calendar) { $taxonomies[RHC_CALENDAR] = $calendar; } if (false !== $venue) { $taxonomies[RHC_VENUE] = $venue; } if (false !== $organizer) { $taxonomies[RHC_ORGANIZER] = $organizer; } } if (!empty($taxonomies)) { $args['tax_query'] = array(); foreach ($taxonomies as $taxonomy => $terms) { $args['tax_query'][] = array('taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $terms, 'operator' => 'IN'); } } if (false !== $author) { $args['author'] = $author; } if (false !== $author_name) { $args['author_name'] = $author_name; } if (false !== $s) { $args['s'] = $s; } $posts = get_posts($args); if (is_array($posts) && count($posts) > 0) { $out .= '<ul>'; foreach ($posts as $p) { $out .= sprintf('<li><a href="%s">%s</a></li>', get_permalink($p->ID), $p->post_title); $microdata .= rhc_template_frontend::event_microdata($p, false, true); } $out .= '</ul>'; } } else { $args = array(); } $url_data = parse_url(site_url('/')); $url_data['path'] = str_replace('/' . $slug_upcoming . '/' . $page, '', $_SERVER['REQUEST_URI']); $url_data['path'] = str_replace('/' . $slug_past . '/' . $page, '', $url_data['path']); $current_url = $this->build_url($url_data); if ($page > 0) { $next_dir = $direction; $prev_dir = $direction; if ($direction > 0) { $next_page = $page + 1; $prev_page = $page - 1; } else { $next_page = $page - 1; $prev_page = $page + 1; } } else { if ($direction > 0) { $next_dir = 1; $prev_dir = 0; $next_page = $page + 1; $prev_page = 0; } else { $next_dir = 1; $prev_dir = 0; $next_page = 0; $prev_page = $page + 1; } } if (get_option('permalink_structure') != '') { $url_data = parse_url($current_url); $next_data = $url_data; $prev_data = $url_data; //--- $next_slug = $next_dir == 1 ? $slug_upcoming : $slug_past; $prev_slug = $prev_dir == 1 ? $slug_upcoming : $slug_past; $next_data['path'] = trailingslashit($next_data['path']) . $next_slug . '/' . $next_page . '/'; $prev_data['path'] = trailingslashit($prev_data['path']) . $prev_slug . '/' . $prev_page . '/'; $next_url = $this->build_url($next_data); $prev_url = $this->build_url($prev_data); $next_url = $this->addURLParameter($next_url, $next_slug, false); $prev_url = $this->addURLParameter($prev_url, $prev_slug, false); } else { $next_url = $this->addURLParameter($current_url, $next_dir == 1 ? $slug_upcoming : $slug_past, $next_page); $prev_url = $this->addURLParameter($current_url, $prev_dir == 1 ? $slug_upcoming : $slug_past, $prev_page); } if (!$haveposts) { if ($direction > 0) { $next_url = ''; } else { $prev_url = ''; } } if (!empty($prev_url)) { $out .= sprintf('<a href="%s">%s</a>', $prev_url, $direction == 0 || $direction == 1 && $page == 0 ? __('Older events', 'rhc') : __('Previous events', 'rhc')); } if (!empty($next_url)) { $out .= sprintf('<a href="%s">%s</a>', $next_url, __('Next events', 'rhc')); } $out = apply_filters('rhc_noscript', $out, $args); $out .= '1' == $noscript ? '</noscript>' : ''; $out .= $microdata; return $out; }