wp-includes/feed.php:804Builds SimplePie object based on RSS or Atom feed from URL.
$urlstring|string[]SimplePie\SimplePie|WP_Error2 hooks fire while fetch_feed() runs, in this order:
Filters the transient lifetime of the feed cache.
Fires just before processing the SimplePie feed object.
function fetch_feed( $url ) { if ( ! class_exists( 'SimplePie\SimplePie', false ) ) { require_once ABSPATH . WPINC . '/class-simplepie.php'; } require_once ABSPATH . WPINC . '/class-wp-feed-cache-transient.php'; require_once ABSPATH . WPINC . '/class-wp-simplepie-file.php'; require_once ABSPATH . WPINC . '/class-wp-simplepie-sanitize-kses.php'; $feed = new SimplePie\SimplePie(); $feed->get_registry()->register( SimplePie\Sanitize::class, 'WP_SimplePie_Sanitize_KSES', true ); /* * We must manually overwrite $feed->sanitize because SimplePie's constructor * sets it before we have a chance to set the sanitization class. */ $feed->sanitize = new WP_SimplePie_Sanitize_KSES(); // Register the cache handler using the recommended method for SimplePie 1.3 or later. if ( method_exists( 'SimplePie_Cache', 'register' ) ) { SimplePie_Cache::register( 'wp_transient', 'WP_Feed_Cache_Transient' ); $feed->set_cache_location( 'wp_transient' ); } else { // Back-compat for SimplePie 1.2.x. require_once ABSPATH . WPINC . '/class-wp-feed-cache.php'; $feed->set_cache_class( 'WP_Feed_Cache' ); } $feed->get_registry()->register( SimplePie\File::class, 'WP_SimplePie_File', true ); /** This filter is documented in wp-includes/class-wp-feed-cache-transient.php */ $feed->set_cache_duration( apply_filters( 'wp_feed_cache_transient_lifetime', 12 * HOUR_IN_SECONDS, $url ) ); /** * Fires just before processing the SimplePie feed object. * * @since 3.0.0 * * @param SimplePie\SimplePie $feed SimplePie feed object (passed by reference). * @param string|string[] $url URL of feed or array of URLs of feeds to retrieve. */ do_action_ref_array( 'wp_feed_options', array( &$feed, $url ) ); if ( empty( $url ) ) { /* * @todo: Set $url to empty string once supported by SimplePie. * * The early return without proceeding is to work around a PHP 8.5 * deprecation issue resolved in https://github.com/simplepie/simplepie/pull/949 * * To avoid the duplicate code, this block can be replaced with `$url = '';` once SimplePie * is upgraded to a version that includes the fix. */ $feed->init(); $feed->set_output_encoding( get_bloginfo( 'charset' ) ); if ( $feed->error() ) { return new WP_Error( 'simplepie-error', $feed->error() ); } return $feed; } elseif ( is_array( $url ) && count( $url ) === 1 ) { $url = array_shift( $url ); } elseif ( is_array( $url ) ) { $feeds = array(); $simplepie_errors = array(); foreach ( $url as $feed_url ) { $simplepie_instance = clone $feed; $simplepie_instance->set_feed_url( $feed_url ); $simplepie_instance->init(); $simplepie_instance->set_output_encoding( get_bloginfo( 'charset' ) ); if ( $simplepie_instance->error() ) { $simplepie_errors[] = sprintf( /* translators: %1$s is the feed URL, %2$s is the error message. */ __( 'Error fetching feed %1$s: %2$s' ), esc_url( $feed_url ), $simplepie_instance->error() );Introduced in 2.8.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/feed.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.