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;
    }
コード例 #2
0
 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;
 }