Home › Forums › Calendar Products › Events Calendar PRO › Events appearing out of order in RSS
- This topic has 7 replies, 2 voices, and was last updated 10 years, 11 months ago by
Nico.
-
AuthorPosts
-
June 3, 2015 at 12:58 pm #967006
jkennedy
ParticipantHi there,
I am having a problem similar to the one outlined in this post: https://theeventscalendar.com/support/forums/topic/events-not-appearing-in-correct-order-in-rss-feed/However, my events are in the correct order (start date) when I use my main events RSS feed. They are only out of order when I try to use the RSS for individual categories or tags. It seems then they order by the date in which we added them to the calendar (publication date).
We really need to be able to pull an RSS feed for specific categories to target newsletters, etc. Can you help?
Thank you!
June 4, 2015 at 5:34 am #967112Nico
MemberHi jkennedy,
Glad to be assisting you on this too.
I’m using “College Planning Deadlines” category to check on this, and the feed seems to be following the same ‘upcoming’ order as the view for that category:
Category: http://cfwvconnect.com/community-calendar/events/category/college-planning-deadlines/
Category Feed: http://cfwvconnect.com/community-calendar/events/category/college-planning-deadlines/feed/Can you provide me the URL’s for a feed not working as expected?
Thanks,
NicoJune 4, 2015 at 6:00 am #967120jkennedy
ParticipantHi Nico,
So for example when I drop the rss feed you used above into my RSS widget on the homepage of my calendar, the events are out of order with the furthest away event on top. Check out the ACT/SAT deadlines section on the homepage of http://www.cfwvconnect.com/community-calendar for an example.June 4, 2015 at 12:37 pm #967299Nico
Memberjkennedy,
Thanks for the feedback on this. The RSS widget show latest entries in the feed first.
To solve this you can use the “Event List” widget, which displays upcoming events for a specific category, also supports multiple categories/tags. If you prefer to stick with the RSS widget you can find a couple of ways to solve this here.
Let me know if you can get that working,
Best,
NicoJune 4, 2015 at 12:43 pm #967302jkennedy
ParticipantHi Nick,
I’m unable to use the events widget, because I want to be able to provide the feed to our partner organizations for them to display links to our events on their websites. Those sites use WordPress too – is there a way for me to somehow connect our calendar feed to their sites (so the events and content would still be on our site, but a dynamic feed would appear in a widget on theirs?)June 5, 2015 at 7:08 am #967403Nico
MemberHi jkennedy,
Thanks for the follow up.
…is there a way for me to somehow connect our calendar feed to their sites…?
Yes, to show your feed in their site, they should setup a RSS Widget just like you did and enter the feed URL from you site. E.g: http://cfwvconnect.com/community-calendar/events/category/college-planning-deadlines/feed/
And to reverse the order of the feed, you can add this code to ‘functions.php’ file in your theme:
function tribe_reverse_feed( $posts ) {global $wp_query;
if( tribe_is_event_query() && $wp_query->is_feed ) {
$posts = array_reverse($posts);
}return $posts;
}
add_action('the_posts', 'tribe_reverse_feed');
Let me know if this works for you,
NicoJune 5, 2015 at 8:02 am #967428jkennedy
ParticipantHi Nico,
I actually ended up using this code (from the link you provided yesterday) and it worked perfectly. Thanks so much for all of your help!/** * RSS widget class */ class Reverse_Widget_RSS extends WP_Widget { function __construct() { $widget_ops = array( 'description' => __('Entries from any RSS or Atom feed ( with Reverse Order Option )') ); $control_ops = array( 'width' => 400, 'height' => 200 ); parent::__construct( 'rss', __('RSS'), $widget_ops, $control_ops ); } function widget($args, $instance) { if ( isset($instance['error']) && $instance['error'] ) return; extract($args, EXTR_SKIP); $url = $instance['url']; while ( stristr($url, 'http') != $url ) $url = substr($url, 1); if ( empty($url) ) return; // self-url destruction sequence if ( in_array( untrailingslashit( $url ), array( site_url(), home_url() ) ) ) return; $rss = fetch_feed($url); $title = $instance['title']; $desc = ''; $link = ''; if ( ! is_wp_error($rss) ) { $desc = esc_attr(strip_tags(@html_entity_decode($rss->get_description(), ENT_QUOTES, get_option('blog_charset')))); if ( empty($title) ) $title = esc_html(strip_tags($rss->get_title())); $link = esc_url(strip_tags($rss->get_permalink())); while ( stristr($link, 'http') != $link ) $link = substr($link, 1); } if ( empty($title) ) $title = empty($desc) ? __('Unknown Feed') : $desc; $title = apply_filters('widget_title', $title, $instance, $this->id_base); $url = esc_url(strip_tags($url)); $icon = includes_url('images/rss.png'); if ( $title ) $title = "<a class='rsswidget' href='$url' title='" . esc_attr__( 'Syndicate this content' ) ."'><img style='border:0' width='14' height='14' src='$icon' alt='RSS' /></a> <a class='rsswidget' href='$link' title='$desc'>$title</a>"; echo $before_widget; if ( $title ) echo $before_title . $title . $after_title; reverse_widget_rss_output( $rss, $instance ); echo $after_widget; if ( ! is_wp_error($rss) ) $rss->__destruct(); unset($rss); } function update($new_instance, $old_instance) { $testurl = ( isset($new_instance['url']) && ($new_instance['url'] != $old_instance['url']) ); return reverse_widget_rss_process( $new_instance, $testurl ); } function form($instance) { if ( empty($instance) ) $instance = array( 'title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0, 'reverse' => 0 ); $instance['number'] = $this->number; reverse_widget_rss_form( $instance ); } } function reverse_widget_rss_output( $rss, $args = array() ) { if ( is_string( $rss ) ) { $rss = fetch_feed($rss); } elseif ( is_array($rss) && isset($rss['url']) ) { $args = $rss; $rss = fetch_feed($rss['url']); } elseif ( !is_object($rss) ) { return; } if ( is_wp_error($rss) ) { if ( is_admin() || current_user_can('manage_options') ) echo '<p>' . sprintf( __('<strong>RSS Error</strong>: %s'), $rss->get_error_message() ) . '</p>'; return; } $default_args = array( 'show_author' => 0, 'show_date' => 0, 'show_summary' => 0, 'reverse' => 0 ); $args = wp_parse_args( $args, $default_args ); extract( $args, EXTR_SKIP ); $items = (int) $items; if ( $items < 1 || 20 < $items ) $items = 10; $show_summary = (int) $show_summary; $show_author = (int) $show_author; $show_date = (int) $show_date; $reverse = (int) $reverse; if ( !$rss->get_item_quantity() ) { echo '<ul><li>' . __( 'An error has occurred; the feed is probably down. Try again later.' ) . '</li></ul>'; $rss->__destruct(); unset($rss); return; } if( $reverse ) $feed_items = array_reverse( $rss->get_items(0, $items) ); else $feed_items = $rss->get_items(0, $items); echo '<ul>'; foreach ( $feed_items as $item ) { $link = $item->get_link(); while ( stristr($link, 'http') != $link ) $link = substr($link, 1); $link = esc_url(strip_tags($link)); $title = esc_attr(strip_tags($item->get_title())); if ( empty($title) ) $title = __('Untitled'); $desc = str_replace( array("\n", "\r"), ' ', esc_attr( strip_tags( @html_entity_decode( $item->get_description(), ENT_QUOTES, get_option('blog_charset') ) ) ) ); $desc = wp_html_excerpt( $desc, 360 ); // Append ellipsis. Change existing [...] to […]. if ( '[...]' == substr( $desc, -5 ) ) $desc = substr( $desc, 0, -5 ) . '[…]'; elseif ( '[…]' != substr( $desc, -10 ) ) $desc .= ' […]'; $desc = esc_html( $desc ); if ( $show_summary ) { $summary = "<div class='rssSummary'>$desc</div>"; } else { $summary = ''; } $date = ''; if ( $show_date ) { $date = $item->get_date( 'U' ); if ( $date ) { $date = ' <span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date ) . '</span>'; } } $author = ''; if ( $show_author ) { $author = $item->get_author(); if ( is_object($author) ) { $author = $author->get_name(); $author = ' <cite>' . esc_html( strip_tags( $author ) ) . '</cite>'; } } if ( $link == '' ) { echo "<li>$title{$date}{$summary}{$author}</li>"; } else { echo "<li><a class='rsswidget' href='$link' title='$desc'>$title</a>{$date}{$summary}{$author}</li>"; } } echo '</ul>'; $rss->__destruct(); unset($rss); } function reverse_widget_rss_process( $widget_rss, $check_feed = true ) { $items = (int) $widget_rss['items']; if ( $items < 1 || 20 < $items ) $items = 10; $url = esc_url_raw(strip_tags( $widget_rss['url'] )); $title = trim(strip_tags( $widget_rss['title'] )); $show_summary = isset($widget_rss['show_summary']) ? (int) $widget_rss['show_summary'] : 0; $show_author = isset($widget_rss['show_author']) ? (int) $widget_rss['show_author'] :0; $show_date = isset($widget_rss['show_date']) ? (int) $widget_rss['show_date'] : 0; $reverse = isset($widget_rss['reverse']) ? (int) $widget_rss['reverse'] : 0; if ( $check_feed ) { $rss = fetch_feed($url); $error = false; $link = ''; if ( is_wp_error($rss) ) { $error = $rss->get_error_message(); } else { $link = esc_url(strip_tags($rss->get_permalink())); while ( stristr($link, 'http') != $link ) $link = substr($link, 1); $rss->__destruct(); unset($rss); } } return compact( 'title', 'url', 'link', 'items', 'error', 'show_summary', 'show_author', 'show_date', 'reverse' ); } function reverse_widget_rss_form( $args, $inputs = null ) { $default_inputs = array( 'url' => true, 'title' => true, 'items' => true, 'show_summary' => true, 'show_author' => true, 'show_date' => true, 'reverse' => true ); $inputs = wp_parse_args( $inputs, $default_inputs ); extract( $args ); extract( $inputs, EXTR_SKIP); $number = esc_attr( $number ); $title = esc_attr( $title ); $url = esc_url( $url ); $items = (int) $items; if ( $items < 1 || 20 < $items ) $items = 10; $show_summary = (int) $show_summary; $show_author = (int) $show_author; $show_date = (int) $show_date; $reverse = (int) $reverse; if ( !empty($error) ) echo '<p class="widget-error"><strong>' . sprintf( __('RSS Error: %s'), $error) . '</strong></p>'; if ( $inputs['url'] ) : ?> <p><label for="rss-url-<?php echo $number; ?>"><?php _e('Enter the RSS feed URL here:'); ?></label> <input class="widefat" id="rss-url-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][url]" type="text" value="<?php echo $url; ?>" /></p> <?php endif; if ( $inputs['title'] ) : ?> <p><label for="rss-title-<?php echo $number; ?>"><?php _e('Give the feed a title (optional):'); ?></label> <input class="widefat" id="rss-title-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][title]" type="text" value="<?php echo $title; ?>" /></p> <?php endif; if ( $inputs['items'] ) : ?> <p><label for="rss-items-<?php echo $number; ?>"><?php _e('How many items would you like to display?'); ?></label> <select id="rss-items-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][items]"> <?php for ( $i = 1; $i <= 20; ++$i ) echo "<option value='$i' " . ( $items == $i ? "selected='selected'" : '' ) . ">$i</option>"; ?> </select></p> <?php endif; if ( $inputs['show_summary'] ) : ?> <p><input id="rss-show-summary-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_summary]" type="checkbox" value="1" <?php if ( $show_summary ) echo 'checked="checked"'; ?>/> <label for="rss-show-summary-<?php echo $number; ?>"><?php _e('Display item content?'); ?></label></p> <?php endif; if ( $inputs['show_author'] ) : ?> <p><input id="rss-show-author-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_author]" type="checkbox" value="1" <?php if ( $show_author ) echo 'checked="checked"'; ?>/> <label for="rss-show-author-<?php echo $number; ?>"><?php _e('Display item author if available?'); ?></label></p> <?php endif; if ( $inputs['show_date'] ) : ?> <p><input id="rss-show-date-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][show_date]" type="checkbox" value="1" <?php if ( $show_date ) echo 'checked="checked"'; ?>/> <label for="rss-show-date-<?php echo $number; ?>"><?php _e('Display item date?'); ?></label></p> <?php endif; if ( $inputs['reverse'] ) : ?> <p><input id="rss-reverse-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][reverse]" type="checkbox" value="1" <?php if ( $reverse ) echo 'checked="checked"'; ?>/> <label for="rss-reverse-<?php echo $number; ?>"><?php _e('Reverse Order?'); ?></label></p> <?php endif; foreach ( array_keys($default_inputs) as $input ) : if ( 'hidden' === $inputs[$input] ) : $id = str_replace( '_', '-', $input ); ?> <input type="hidden" id="rss-<?php echo $id; ?>-<?php echo $number; ?>" name="widget-rss[<?php echo $number; ?>][<?php echo $input; ?>]" value="<?php echo $$input; ?>" /> <?php endif; endforeach; } function register_rss_widget() { unregister_widget( 'WP_Widget_RSS' ); register_widget( 'Reverse_Widget_RSS' ); } add_action( 'widgets_init', 'register_rss_widget' );June 5, 2015 at 10:33 am #967474Nico
MemberGreat! Happy to help 🙂
I’m closing this topic – but please don’t hesitate to create new topics if you need help with anything else.
Nico
-
AuthorPosts
- The topic ‘Events appearing out of order in RSS’ is closed to new replies.
