<?php class WP_Widget_RSS extends WP_Widget { public function __construct() { $widget_ops = array('description' => __('Entries from any RSS or Atom feed.'), 'customize_selective_refresh' => true); $control_ops = array('width' => 400, 'height' => 200); parent::__construct('rss', __('RSS'), $widget_ops, $control_ops); } public function widget($args, $instance) { if (isset($instance['error']) && $instance['error']) { return; } $url = !empty($instance['url']) ? $instance['url'] : ''; while (stristr($url, 'http') !== $url) { $url = substr($url, 1); } if (empty($url)) { return; } if (in_array(untrailingslashit($url), array(site_url(), home_url()), true)) { 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 = strip_tags($rss->get_title()); } $link = strip_tags($rss->get_permalink()); while (stristr($link, 'http') !== $link) { $link = substr($link, 1); } } if (empty($title)) { $title = !empty($desc) ? $desc : __('Unknown Feed'); } $title = apply_filters('widget_title', $title, $instance, $this->id_base); $url = strip_tags($url); $icon = includes_url('images/rss.png'); if ($title) { $title = '<a class="rsswidget" href="' . esc_url($url) . '"><img class="rss-widget-icon" style="border:0" width="14" height="14" src="' . esc_url($icon) . '" alt="RSS" /></a> <a class="rsswidget" href="' . esc_url($link) . '">' . esc_html($title) . '</a>'; } echo $args['before_widget']; if ($title) { echo $args['before_title'] . $title . $args['after_title']; } $format = current_theme_supports('html5', 'navigation-widgets') ? 'html5' : 'xhtml'; $format = apply_filters('navigation_widgets_format', $format); if ('html5' === $format) { $title = trim(strip_tags($title)); $aria_label = $title ? $title : __('RSS Feed'); echo '<nav role="navigation" aria-label="' . esc_attr($aria_label) . '">'; } wp_widget_rss_output($rss, $instance); if ('html5' === $format) { echo '</nav>'; } echo $args['after_widget']; if (!is_wp_error($rss)) { $rss->__destruct(); } unset($rss); } public function update($new_instance, $old_instance) { $testurl = isset($new_instance['url']) && (!isset($old_instance['url']) || $new_instance['url'] !== $old_instance['url']); return wp_widget_rss_process($new_instance, $testurl); } public function form($instance) { if (empty($instance)) { $instance = array('title' => '', 'url' => '', 'items' => 10, 'error' => false, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0); } $instance['number'] = $this->number; wp_widget_rss_form($instance); } }