WordPress/wp-includes/blocks/rss.php
Sergey Biryukov bfbf1bc053 Editor: Update packages for 6.1 Release Candidate 2.
Package updates for bug and regression fixes:
- `@wordpress/block-directory: 3.15.8`
- `@wordpress/block-editor: 10.0.7`
- `@wordpress/block-library: 7.14.8`
- `@wordpress/components: 21.0.6`
- `@wordpress/customize-widgets: 3.14.8`
- `@wordpress/edit-post: 6.14.8`
- `@wordpress/edit-site: 4.14.10`
- `@wordpress/edit-widgets: 4.14.8`
- `@wordpress/editor: 12.16.7`
- `@wordpress/format-library: 3.15.7`
- `@wordpress/interface: 4.16.6`
- `@wordpress/list-reusable-blocks: 3.15.6`
- `@wordpress/nux: 5.15.6`
- `@wordpress/preferences: 2.9.6`
- `@wordpress/reusable-blocks: 3.15.7`
- `@wordpress/server-side-render: 3.15.6`
- `@wordpress/widgets: 2.15.7`

Original PRs from Gutenberg repository:
- [https://github.com/WordPress/gutenberg/pull/45041 #45041 Font Size Picker Hint: Fallback to font size `slug` if `name` is undefined]
- [https://github.com/WordPress/gutenberg/pull/45045 #45045 Add: Missing output escaping on some blocks]
- [https://github.com/WordPress/gutenberg/pull/44999 #44999 Escape comment author URL]
- [https://github.com/WordPress/gutenberg/pull/44972 #44972 Navigator: restore focus only once per location]
- [https://github.com/WordPress/gutenberg/pull/44858 #44858 Spacing Sizes Control: Try improving layout spacing]
- [https://github.com/WordPress/gutenberg/pull/44878 #44878 Fix: Inspector is usable on the top level block even if it is content locked]
- [https://github.com/WordPress/gutenberg/pull/44809 #44809 Fix list outdents on Enter in quote block]
- [https://github.com/WordPress/gutenberg/pull/44864 #44864 List v2: fix selection when creating paragraph from empty list item]
- [https://github.com/WordPress/gutenberg/pull/44853 #44853 Fix overflowing patterns]
- [https://github.com/WordPress/gutenberg/pull/45050 #45050 Fix visibility of nested Group block appender]
- [https://github.com/WordPress/gutenberg/pull/44887 #44887 wp-env: Use case insensitive regex when checking WP version string]

Follow-up to [54257], [54335], [54383], [54483], [54486], [54490].

Props bernhard-reiter, audrasjb.
See #56467.
Built from https://develop.svn.wordpress.org/trunk@54632


git-svn-id: http://core.svn.wordpress.org/trunk@54184 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2022-10-18 13:56:02 +00:00

120 lines
3.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Server-side rendering of the `core/rss` block.
*
* @package WordPress
*/
/**
* Renders the `core/rss` block on server.
*
* @param array $attributes The block attributes.
*
* @return string Returns the block content with received rss items.
*/
function render_block_core_rss( $attributes ) {
if ( in_array( untrailingslashit( $attributes['feedURL'] ), array( site_url(), home_url() ), true ) ) {
return '<div class="components-placeholder"><div class="notice notice-error">' . __( 'Adding an RSS feed to this sites homepage is not supported, as it could lead to a loop that slows down your site. Try using another block, like the <strong>Latest Posts</strong> block, to list posts from the site.' ) . '</div></div>';
}
$rss = fetch_feed( $attributes['feedURL'] );
if ( is_wp_error( $rss ) ) {
return '<div class="components-placeholder"><div class="notice notice-error"><strong>' . __( 'RSS Error:' ) . '</strong> ' . esc_html( $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> ',
esc_attr( date_i18n( get_option( 'c' ), $date ) ),
esc_attr( 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">' . sprintf(
/* translators: %s: the author. */
__( 'by %s' ),
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>";
}
$classnames = array();
if ( isset( $attributes['blockLayout'] ) && 'grid' === $attributes['blockLayout'] ) {
$classnames[] = 'is-grid';
}
if ( isset( $attributes['columns'] ) && 'grid' === $attributes['blockLayout'] ) {
$classnames[] = 'columns-' . $attributes['columns'];
}
if ( $attributes['displayDate'] ) {
$classnames[] = 'has-dates';
}
if ( $attributes['displayAuthor'] ) {
$classnames[] = 'has-authors';
}
if ( $attributes['displayExcerpt'] ) {
$classnames[] = 'has-excerpts';
}
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) );
return sprintf( '<ul %s>%s</ul>', $wrapper_attributes, $list_items );
}
/**
* Registers the `core/rss` block on server.
*/
function register_block_core_rss() {
register_block_type_from_metadata(
__DIR__ . '/rss',
array(
'render_callback' => 'render_block_core_rss',
)
);
}
add_action( 'init', 'register_block_core_rss' );