You are here

function gutenberg_render_block_core_rss in Gutenberg 8.2

Same name and namespace in other branches
  1. 8 vendor/gutenberg/block-library/blocks/rss.php \gutenberg_render_block_core_rss()

Renders the `core/rss` block on server.

Parameters

array $attributes The block attributes.:

Return value

string Returns the block content with received rss items.

1 string reference to 'gutenberg_render_block_core_rss'
gutenberg_register_block_core_rss in vendor/gutenberg/block-library/blocks/rss.php
Registers the `core/rss` block on server.

File

vendor/gutenberg/block-library/blocks/rss.php, line 15

Code

function gutenberg_render_block_core_rss($attributes) {
  $rss = fetch_feed($attributes['feedURL']);
  if (is_wp_error($rss)) {
    return '<div class="components-placeholder"><div class="notice notice-error"><strong>' . __('RSS Error:') . '</strong> ' . $rss
      ->get_error_message() . '</div></div>';
  }
  if (!$rss
    ->get_item_quantity()) {
    return '<div class="components-placeholder"><div class="notice notice-error">' . __('An error has occurred, which probably means the feed is down. Try again later.') . '</div></div>';
  }
  $rss_items = $rss
    ->get_items(0, $attributes['itemsToShow']);
  $list_items = '';
  foreach ($rss_items as $item) {
    $title = esc_html(trim(strip_tags($item
      ->get_title())));
    if (empty($title)) {
      $title = __('(no title)');
    }
    $link = $item
      ->get_link();
    $link = esc_url($link);
    if ($link) {
      $title = "<a href='{$link}'>{$title}</a>";
    }
    $title = "<div class='wp-block-rss__item-title'>{$title}</div>";
    $date = '';
    if ($attributes['displayDate']) {
      $date = $item
        ->get_date('U');
      if ($date) {
        $date = sprintf('<time datetime="%1$s" class="wp-block-rss__item-publish-date">%2$s</time> ', date_i18n(get_option('c'), $date), date_i18n(get_option('date_format'), $date));
      }
    }
    $author = '';
    if ($attributes['displayAuthor']) {
      $author = $item
        ->get_author();
      if (is_object($author)) {
        $author = $author
          ->get_name();
        $author = '<span class="wp-block-rss__item-author">' . __('by') . ' ' . esc_html(strip_tags($author)) . '</span>';
      }
    }
    $excerpt = '';
    if ($attributes['displayExcerpt']) {
      $excerpt = html_entity_decode($item
        ->get_description(), ENT_QUOTES, get_option('blog_charset'));
      $excerpt = esc_attr(wp_trim_words($excerpt, $attributes['excerptLength'], ' [&hellip;]'));

      // Change existing [...] to [&hellip;].
      if ('[...]' === substr($excerpt, -5)) {
        $excerpt = substr($excerpt, 0, -5) . '[&hellip;]';
      }
      $excerpt = '<div class="wp-block-rss__item-excerpt">' . esc_html($excerpt) . '</div>';
    }
    $list_items .= "<li class='wp-block-rss__item'>{$title}{$date}{$author}{$excerpt}</li>";
  }
  $class = 'wp-block-rss';
  if (isset($attributes['align'])) {
    $class .= ' align' . $attributes['align'];
  }
  if (isset($attributes['blockLayout']) && 'grid' === $attributes['blockLayout']) {
    $class .= ' is-grid';
  }
  if (isset($attributes['columns']) && 'grid' === $attributes['blockLayout']) {
    $class .= ' columns-' . $attributes['columns'];
  }
  if (isset($attributes['className'])) {
    $class .= ' ' . $attributes['className'];
  }
  return sprintf('<ul class="%s">%s</ul>', esc_attr($class), $list_items);
}