/home/techb158/public_html/wp-includes
NameSizeModeActions
abilities-api/-0755rm
ai-client/-0755rm
assets/-0777rm
block-bindings/-0755rm
block-patterns/-0777rm
block-supports/-0777rm
blocks/-0777rm
build/-0755rm
certificates/-0777rm
css/-0777rm
customize/-0777rm
fonts/-0777rm
html-api/-0755rm
ID3/-0777rm
images/-0777rm
interactivity-api/-0755rm
IXR/-0777rm
js/-0777rm
l10n/-0755rm
php-ai-client/-0755rm
php-compat/-0777rm
PHPMailer/-0777rm
pomo/-0777rm
Requests/-0777rm
rest-api/-0777rm
SimplePie/-0777rm
sitemaps/-0777rm
sodium_compat/-0777rm
style-engine/-0777rm
Text/-0777rm
theme-compat/-0777rm
widgets/-0777rm
.htaccess1780644editdlrm
abilities-api.php328000666editdlrm
abilities.php117970666editdlrm
admin-bar.php400670666editdlrm
ai-client.php25490666editdlrm
atomlib.php121810666editdlrm
author-template.php198440666editdlrm
block-bindings.php76320666editdlrm
block-editor.php287240666editdlrm
block-i18n.json3160666editdlrm
block-patterns.php156060666editdlrm
block-template-utils.php631680666editdlrm
block-template.php182570666editdlrm
blocks.php1242050666editdlrm
bookmark-template.php127680666editdlrm
bookmark.php154270666editdlrm
cache-compat.php110210666editdlrm
cache.php134860666editdlrm
canonical.php347860666editdlrm
capabilities.php435840666editdlrm
category-template.php569900666editdlrm
category.php128340666editdlrm
class-avif-info.php300080666editdlrm
class-feed.php5390666editdlrm
class-http.php3670666editdlrm
class-IXR.php26090666editdlrm
class-json.php436760666editdlrm
class-oembed.php4010666editdlrm
class-phpass.php67710666editdlrm
class-phpmailer.php6640666editdlrm
class-pop3.php211000666editdlrm
class-requests.php22370666editdlrm
class-simplepie.php4530666editdlrm
class-smtp.php4570666editdlrm
class-snoopy.php377150666editdlrm
class-walker-category-dropdown.php24690666editdlrm
class-walker-category.php84770666editdlrm
class-walker-comment.php142210666editdlrm
class-walker-nav-menu.php120440666editdlrm
class-walker-page-dropdown.php27100666editdlrm
class-walker-page.php76120666editdlrm
class-wp-admin-bar.php180020666editdlrm
class-wp-ajax-response.php52880666editdlrm
class-wp-application-passwords.php170990666editdlrm
class-wp-block-bindings-registry.php82630666editdlrm
class-wp-block-bindings-source.php29920666editdlrm
class-wp-block-editor-context.php13500666editdlrm
class-wp-block-list.php47130666editdlrm
class-wp-block-metadata-registry.php118460666editdlrm
class-wp-block-parser-block.php25550666editdlrm
class-wp-block-parser-frame.php19940666editdlrm
class-wp-block-parser.php115250666editdlrm
class-wp-block-pattern-categories-registry.php43830666editdlrm
class-wp-block-patterns-registry.php102650666editdlrm
class-wp-block-processor.php699140666editdlrm
class-wp-block-styles-registry.php64190666editdlrm
class-wp-block-supports.php75780666editdlrm
class-wp-block-template.php21110666editdlrm
class-wp-block-templates-registry.php70800666editdlrm
class-wp-block-type-registry.php53050666editdlrm
class-wp-block-type.php172220666editdlrm
class-wp-block.php282360666editdlrm
class-wp-classic-to-block-menu-converter.php40260666editdlrm
class-wp-comment-query.php490400666editdlrm
class-wp-comment.php172490666editdlrm
class-wp-connector-registry.php151810666editdlrm
class-wp-customize-control.php261120666editdlrm
class-wp-customize-manager.php2029080666editdlrm
class-wp-customize-nav-menus.php580340666editdlrm
class-wp-customize-panel.php107030666editdlrm
class-wp-customize-section.php112090666editdlrm
class-wp-customize-setting.php299560666editdlrm
class-wp-customize-widgets.php725960666editdlrm
class-wp-date-query.php359700666editdlrm
class-wp-dependencies.php170890666editdlrm
class-wp-dependency.php26530666editdlrm
class-wp-duotone.php408360666editdlrm
class-wp-editor.php722280666editdlrm
class-wp-embed.php159080666editdlrm
class-wp-error.php75140666editdlrm
class-wp-exception.php2530666editdlrm
class-wp-fatal-error-handler.php81500666editdlrm
class-wp-feed-cache-transient.php33040666editdlrm
class-wp-feed-cache.php9690666editdlrm
class-wp-filter-sentinel.php7600666editdlrm
class-wp-hook.php174720666editdlrm
class-wp-http-cookie.php72690666editdlrm
class-wp-http-curl.php132610666editdlrm
class-wp-http-encoding.php66890666editdlrm
class-wp-http-ixr-client.php35160666editdlrm
class-wp-http-proxy.php59800666editdlrm
class-wp-http-requests-hooks.php20220666editdlrm
class-wp-http-requests-response.php42430666editdlrm
class-wp-http-response.php29770666editdlrm
class-wp-http-streams.php167640666editdlrm
class-wp-http.php416410666editdlrm
class-wp-icon-collections-registry.php58050666editdlrm
class-wp-icons-registry.php99030666editdlrm
class-wp-image-editor-gd.php207410666editdlrm
class-wp-image-editor-imagick.php434540666editdlrm
class-wp-image-editor.php174560666editdlrm
class-wp-list-util.php74430666editdlrm
class-wp-locale-switcher.php67760666editdlrm
class-wp-locale.php168480666editdlrm
class-wp-matchesmapregex.php18280666editdlrm
class-wp-meta-query.php305070666editdlrm
class-wp-metadata-lazyloader.php68330666editdlrm
class-wp-navigation-fallback.php91930666editdlrm
class-wp-network-query.php199890666editdlrm
class-wp-network.php124110666editdlrm
class-wp-object-cache.php175240666editdlrm
class-wp-oembed-controller.php69050666editdlrm
class-wp-oembed.php343720666editdlrm
class-wp-paused-extensions-storage.php50670666editdlrm
class-wp-phpmailer.php43480666editdlrm
class-wp-plugin-dependencies.php252090666editdlrm
class-wp-post-type.php306720666editdlrm
class-wp-post.php88060666editdlrm
class-wp-query.php1641480666editdlrm
class-wp-recovery-mode-cookie-service.php68770666editdlrm
class-wp-recovery-mode-email-service.php111620666editdlrm
class-wp-recovery-mode-key-service.php49140666editdlrm
class-wp-recovery-mode-link-service.php35230666editdlrm
class-wp-recovery-mode.php114600666editdlrm
class-wp-rewrite.php636930666editdlrm
class-wp-role.php25230666editdlrm
class-wp-roles.php93260666editdlrm
class-wp-script-modules.php407430666editdlrm
class-wp-scripts.php367540666editdlrm
class-wp-session-tokens.php73190666editdlrm
class-wp-simplepie-file.php35520666editdlrm
class-wp-simplepie-sanitize-kses.php19030666editdlrm
class-wp-site-query.php314820666editdlrm
class-wp-site.php78360666editdlrm
class-wp-speculation-rules.php78840666editdlrm
class-wp-styles.php133160666editdlrm
class-wp-tax-query.php195770666editdlrm
class-wp-taxonomy.php185590666editdlrm
class-wp-term-query.php407510666editdlrm
class-wp-term.php52630666editdlrm
class-wp-text-diff-renderer-inline.php9790666editdlrm
class-wp-text-diff-renderer-table.php189250666editdlrm
class-wp-textdomain-registry.php104810666editdlrm
class-wp-theme-json-data.php18050666editdlrm
class-wp-theme-json-resolver.php356920666editdlrm
class-wp-theme-json-schema.php73670666editdlrm
class-wp-theme-json.php2215060666editdlrm
class-wp-theme.php658110666editdlrm
class-wp-token-map.php290320666editdlrm
class-wp-url-pattern-prefixer.php48020666editdlrm
class-wp-user-meta-session-tokens.php29540666editdlrm
class-wp-user-query.php441020666editdlrm
class-wp-user-request.php23420666editdlrm
class-wp-user.php231890666editdlrm
class-wp-view-config-data.php294270666editdlrm
class-wp-walker.php132920666editdlrm
class-wp-widget-factory.php33430666editdlrm
class-wp-widget.php191290644editdlrm
class-wp-xmlrpc-server.php2162720666editdlrm
class-wp.php263710666editdlrm
class-wpdb.php1214370666editdlrm
class.wp-dependencies.php3730666editdlrm
class.wp-scripts.php3430666editdlrm
class.wp-styles.php3380666editdlrm
comment-template.php1032110666editdlrm
comment.php1506300666editdlrm
compat-utf8.php193860666editdlrm
compat.php231050644editdlrm
connectors.php329220666editdlrm
cron.php462660666editdlrm
date.php4000666editdlrm
default-constants.php113650666editdlrm
default-filters.php395000666editdlrm
default-widgets.php22880666editdlrm
deprecated.php1939770666editdlrm
embed-template.php3380666editdlrm
embed.php392150666editdlrm
error-protection.php40920666editdlrm
feed-atom-comments.php55040666editdlrm
feed-atom.php31140666editdlrm
feed-rdf.php26680666editdlrm
feed-rss.php11890666editdlrm
feed-rss2-comments.php41360666editdlrm
feed-rss2.php37990666editdlrm
feed.php251890666editdlrm
fonts.php97890666editdlrm
formatting.php3576520666editdlrm
functions.php2954810666editdlrm
functions.wp-scripts.php204920666editdlrm
functions.wp-styles.php86540666editdlrm
general-template.php1834720666editdlrm
global-styles-and-settings.php207800666editdlrm
http.php289610666editdlrm
https-detection.php58570666editdlrm
https-migration.php47410666editdlrm
icons.php63340666editdlrm
index.php10880444editdlrm
json-schema.php78020666editdlrm
kses.php884970666editdlrm
kwa.txt10644editdlrm
l10n.php714150666editdlrm
link-template.php1601430666editdlrm
load.php571480644editdlrm
locale.php1620666editdlrm
media-template.php657590666editdlrm
media.php2368040666editdlrm
meta.php667390666editdlrm
ms-blogs.php263240666editdlrm
ms-default-constants.php49210666editdlrm
ms-default-filters.php66360666editdlrm
ms-deprecated.php217870666editdlrm
ms-files.php28570666editdlrm
ms-functions.php932580644editdlrm
ms-load.php200550666editdlrm
ms-network.php37820666editdlrm
ms-settings.php41970666editdlrm
ms-site.php417290666editdlrm
nav-menu-template.php259830666editdlrm
nav-menu.php442690666editdlrm
option.php1052460666editdlrm
pluggable-deprecated.php63240666editdlrm
pluggable.php1279190666editdlrm
plugin.php391100644editdlrm
post-formats.php70700666editdlrm
post-template.php691290666editdlrm
post-thumbnail-template.php108790666editdlrm
post.php3052150666editdlrm
query.php375540666editdlrm
registration-functions.php2000666editdlrm
registration.php2000666editdlrm
rest-api.php1029510666editdlrm
revision.php312410666editdlrm
rewrite.php195670666editdlrm
robots-template.php51850666editdlrm
rss-functions.php2770666editdlrm
rss.php232030666editdlrm
script-loader.php1635500666editdlrm
script-modules.php123110666editdlrm
session.php2580666editdlrm
shortcodes.php240340666editdlrm
sitemaps.php32380666editdlrm
speculative-loading.php118800666editdlrm
spl-autoload-compat.php4410666editdlrm
style-engine.php80450666editdlrm
taxonomy.php1783070666editdlrm
template-canvas.php5440666editdlrm
template-loader.php42670666editdlrm
template.php368240666editdlrm
theme-i18n.json18920666editdlrm
theme-previews.php28870666editdlrm
theme-templates.php40600666editdlrm
theme.json94800666editdlrm
theme.php1346410666editdlrm
update.php382690666editdlrm
user.php1803010666editdlrm
utf8.php69770666editdlrm
vars.php66000666editdlrm
version.php18090644editdlrm
view-config.php190870666editdlrm
view-transitions.php6020666editdlrm
widgets.php708660666editdlrm
wp-db.php4450666editdlrm
wp-diff.php7920666editdlrm
Edit: /home/techb158/public_html/wp-includes/feed.php (25189B)
document_title_separator' ) ); } /** * Filters the blog title for use as the feed title. * * @since 2.2.0 * @since 4.4.0 The `$sep` parameter was deprecated and renamed to `$deprecated`. * * @param string $title The current blog title. * @param string $deprecated Unused. */ return apply_filters( 'get_wp_title_rss', wp_get_document_title(), $deprecated ); } /** * Displays the blog title for display of the feed title. * * @since 2.2.0 * @since 4.4.0 The optional `$sep` parameter was deprecated and renamed to `$deprecated`. * * @param string $deprecated Unused. */ function wp_title_rss( $deprecated = '–' ) { if ( '–' !== $deprecated ) { /* translators: %s: 'document_title_separator' filter name. */ _deprecated_argument( __FUNCTION__, '4.4.0', sprintf( __( 'Use the %s filter instead.' ), 'document_title_separator' ) ); } /** * Filters the blog title for display of the feed title. * * @since 2.2.0 * @since 4.4.0 The `$sep` parameter was deprecated and renamed to `$deprecated`. * * @see get_wp_title_rss() * * @param string $wp_title_rss The current blog title. * @param string $deprecated Unused. */ echo apply_filters( 'wp_title_rss', get_wp_title_rss(), $deprecated ); } /** * Retrieves the current post title for the feed. * * @since 2.0.0 * @since 6.6.0 Added the `$post` parameter. * * @param int|WP_Post $post Optional. Post ID or WP_Post object. Default is global $post. * @return string Current post title. */ function get_the_title_rss( $post = 0 ) { $title = get_the_title( $post ); /** * Filters the post title for use in a feed. * * @since 1.2.0 * * @param string $title The current post title. */ return apply_filters( 'the_title_rss', $title ); } /** * Displays the post title in the feed. * * @since 0.71 */ function the_title_rss() { echo get_the_title_rss(); } /** * Retrieves the post content for feeds. * * @since 2.9.0 * * @see get_the_content() * * @param string $feed_type The type of feed. rss2 | atom | rss | rdf * @return string The filtered content. */ function get_the_content_feed( $feed_type = null ) { if ( ! $feed_type ) { $feed_type = get_default_feed(); } /** This filter is documented in wp-includes/post-template.php */ $content = apply_filters( 'the_content', get_the_content() ); $content = str_replace( ']]>', ']]>', $content ); /** * Filters the post content for use in feeds. * * @since 2.9.0 * * @param string $content The current post content. * @param string $feed_type Type of feed. Possible values include 'rss2', 'atom'. * Default 'rss2'. */ return apply_filters( 'the_content_feed', $content, $feed_type ); } /** * Displays the post content for feeds. * * @since 2.9.0 * * @param string $feed_type The type of feed. rss2 | atom | rss | rdf */ function the_content_feed( $feed_type = null ) { echo get_the_content_feed( $feed_type ); } /** * Displays the post excerpt for the feed. * * @since 0.71 */ function the_excerpt_rss() { $output = get_the_excerpt(); /** * Filters the post excerpt for a feed. * * @since 1.2.0 * * @param string $output The current post excerpt. */ echo apply_filters( 'the_excerpt_rss', $output ); } /** * Displays the permalink to the post for use in feeds. * * @since 2.3.0 */ function the_permalink_rss() { /** * Filters the permalink to the post for use in feeds. * * @since 2.3.0 * * @param string $post_permalink The current post permalink. */ echo esc_url( apply_filters( 'the_permalink_rss', get_permalink() ) ); } /** * Outputs the link to the comments for the current post in an XML safe way. * * @since 3.0.0 */ function comments_link_feed() { /** * Filters the comments permalink for the current post. * * @since 3.6.0 * * @param string $comment_permalink The current comment permalink with * '#comments' appended. */ echo esc_url( apply_filters( 'comments_link_feed', get_comments_link() ) ); } /** * Displays the feed GUID for the current comment. * * @since 2.5.0 * * @param int|WP_Comment $comment_id Optional comment object or ID. Defaults to global comment object. */ function comment_guid( $comment_id = null ) { echo esc_url( get_comment_guid( $comment_id ) ); } /** * Retrieves the feed GUID for the current comment. * * @since 2.5.0 * * @param int|WP_Comment $comment_id Optional comment object or ID. Defaults to global comment object. * @return string|false GUID for comment on success, false on failure. */ function get_comment_guid( $comment_id = null ) { $comment = get_comment( $comment_id ); if ( ! is_object( $comment ) ) { return false; } return get_the_guid( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID; } /** * Displays the link to the comments. * * @since 1.5.0 * @since 4.4.0 Introduced the `$comment` argument. * * @param int|WP_Comment $comment Optional. Comment object or ID. Defaults to global comment object. */ function comment_link( $comment = null ) { /** * Filters the current comment's permalink. * * @since 3.6.0 * * @see get_comment_link() * * @param string $comment_permalink The current comment permalink. */ echo esc_url( apply_filters( 'comment_link', get_comment_link( $comment ) ) ); } /** * Retrieves the current comment author for use in the feeds. * * @since 2.0.0 * * @return string Comment Author. */ function get_comment_author_rss() { /** * Filters the current comment author for use in a feed. * * @since 1.5.0 * * @see get_comment_author() * * @param string $comment_author The current comment author. */ return apply_filters( 'comment_author_rss', get_comment_author() ); } /** * Displays the current comment author in the feed. * * @since 1.0.0 */ function comment_author_rss() { echo get_comment_author_rss(); } /** * Displays the current comment content for use in the feeds. * * @since 1.0.0 */ function comment_text_rss() { $comment_text = get_comment_text(); /** * Filters the current comment content for use in a feed. * * @since 1.5.0 * * @param string $comment_text The content of the current comment. */ $comment_text = apply_filters( 'comment_text_rss', $comment_text ); echo $comment_text; } /** * Retrieves all of the post categories, formatted for use in feeds. * * All of the categories for the current post in the feed loop, will be * retrieved and have feed markup added, so that they can easily be added to the * RSS2, Atom, or RSS1 and RSS0.91 RDF feeds. * * @since 2.1.0 * * @param string $type Optional, default is the type returned by get_default_feed(). * @return string All of the post categories for displaying in the feed. */ function get_the_category_rss( $type = null ) { if ( empty( $type ) ) { $type = get_default_feed(); } $categories = get_the_category(); $tags = get_the_tags(); $the_list = ''; $cat_names = array(); $filter = 'rss'; if ( 'atom' === $type ) { $filter = 'raw'; } if ( ! empty( $categories ) ) { foreach ( (array) $categories as $category ) { $cat_names[] = sanitize_term_field( 'name', $category->name, $category->term_id, 'category', $filter ); } } if ( ! empty( $tags ) ) { foreach ( (array) $tags as $tag ) { $cat_names[] = sanitize_term_field( 'name', $tag->name, $tag->term_id, 'post_tag', $filter ); } } $cat_names = array_unique( $cat_names ); foreach ( $cat_names as $cat_name ) { if ( 'rdf' === $type ) { $the_list .= "\t\t\n"; } elseif ( 'atom' === $type ) { $the_list .= sprintf( '', esc_attr( get_bloginfo_rss( 'url' ) ), esc_attr( $cat_name ) ); } else { $the_list .= "\t\t\n"; } } /** * Filters all of the post categories for display in a feed. * * @since 1.2.0 * * @param string $the_list All of the RSS post categories. * @param string $type Type of feed. Possible values include 'rss2', 'atom'. * Default 'rss2'. */ return apply_filters( 'the_category_rss', $the_list, $type ); } /** * Displays the post categories in the feed. * * @since 0.71 * * @see get_the_category_rss() For better explanation. * * @param string $type Optional, default is the type returned by get_default_feed(). */ function the_category_rss( $type = null ) { echo get_the_category_rss( $type ); } /** * Displays the HTML type based on the blog setting. * * The two possible values are either 'xhtml' or 'html'. * * @since 2.2.0 */ function html_type_rss() { $type = get_bloginfo( 'html_type' ); if ( str_contains( $type, 'xhtml' ) ) { $type = 'xhtml'; } else { $type = 'html'; } echo $type; } /** * Displays the rss enclosure for the current post. * * Uses the global $post to check whether the post requires a password and if * the user has the password for the post. If not then it will return before * displaying. * * Also uses the function get_post_custom() to get the post's 'enclosure' * metadata field and parses the value to display the enclosure(s). The * enclosure(s) consist of enclosure HTML tag(s) with a URI and other * attributes. * * @since 1.5.0 */ function rss_enclosure() { if ( post_password_required() ) { return; } foreach ( (array) get_post_custom() as $key => $val ) { if ( 'enclosure' === $key ) { foreach ( (array) $val as $enc ) { $enclosure = explode( "\n", $enc ); if ( count( $enclosure ) < 3 ) { continue; } // Only get the first element, e.g. 'audio/mpeg' from 'audio/mpeg mpga mp2 mp3'. $t = preg_split( '/[ \t]/', trim( $enclosure[2] ) ); $type = $t[0]; /** * Filters the RSS enclosure HTML link tag for the current post. * * @since 2.2.0 * * @param string $html_link_tag The HTML link tag with a URI and other attributes. */ echo apply_filters( 'rss_enclosure', '' . "\n" ); } } } } /** * Displays the atom enclosure for the current post. * * Uses the global $post to check whether the post requires a password and if * the user has the password for the post. If not then it will return before * displaying. * * Also uses the function get_post_custom() to get the post's 'enclosure' * metadata field and parses the value to display the enclosure(s). The * enclosure(s) consist of link HTML tag(s) with a URI and other attributes. * * @since 2.2.0 */ function atom_enclosure() { if ( post_password_required() ) { return; } foreach ( (array) get_post_custom() as $key => $val ) { if ( 'enclosure' === $key ) { foreach ( (array) $val as $enc ) { $enclosure = explode( "\n", $enc ); $url = ''; $type = ''; $length = 0; $mimes = get_allowed_mime_types(); // Parse URL. if ( isset( $enclosure[0] ) && is_string( $enclosure[0] ) ) { $url = trim( $enclosure[0] ); } // Parse length and type. for ( $i = 1; $i <= 2; $i++ ) { if ( isset( $enclosure[ $i ] ) ) { if ( is_numeric( $enclosure[ $i ] ) ) { $length = trim( $enclosure[ $i ] ); } elseif ( in_array( $enclosure[ $i ], $mimes, true ) ) { $type = trim( $enclosure[ $i ] ); } } } $html_link_tag = sprintf( "\n", esc_url( $url ), esc_attr( $length ), esc_attr( $type ) ); /** * Filters the atom enclosure HTML link tag for the current post. * * @since 2.2.0 * * @param string $html_link_tag The HTML link tag with a URI and other attributes. */ echo apply_filters( 'atom_enclosure', $html_link_tag ); } } } } /** * Determines the type of a string of data with the data formatted. * * Tell whether the type is text, HTML, or XHTML, per RFC 4287 section 3.1. * * In the case of WordPress, text is defined as containing no markup, * XHTML is defined as "well formed", and HTML as tag soup (i.e., the rest). * * Container div tags are added to XHTML values, per section 3.1.1.3. * * @link http://www.atomenabled.org/developers/syndication/atom-format-spec.php#rfc.section.3.1 * * @since 2.5.0 * * @param string $data Input string. * @return array array(type, value) */ function prep_atom_text_construct( $data ) { if ( ! str_contains( $data, '<' ) && ! str_contains( $data, '&' ) ) { return array( 'text', $data ); } 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 array( 'html', "" ); } $parser = xml_parser_create(); xml_parse( $parser, '
' . $data . '
', true ); $code = xml_get_error_code( $parser ); if ( PHP_VERSION_ID < 80000 ) { // xml_parser_free() has no effect as of PHP 8.0. xml_parser_free( $parser ); } unset( $parser ); if ( ! $code ) { if ( ! str_contains( $data, '<' ) ) { return array( 'text', $data ); } else { $data = "
$data
"; return array( 'xhtml', $data ); } } if ( ! str_contains( $data, ']]>' ) ) { return array( 'html', "" ); } else { return array( 'html', htmlspecialchars( $data ) ); } } /** * Displays Site Icon in atom feeds. * * @since 4.3.0 * * @see get_site_icon_url() */ function atom_site_icon() { $url = get_site_icon_url( 32 ); if ( $url ) { echo '' . convert_chars( $url ) . "\n"; } } /** * Displays Site Icon in RSS2. * * @since 4.3.0 */ function rss2_site_icon() { $rss_title = get_wp_title_rss(); if ( empty( $rss_title ) ) { $rss_title = get_bloginfo_rss( 'name' ); } $url = get_site_icon_url( 32 ); if ( $url ) { echo ' ' . convert_chars( $url ) . ' ' . $rss_title . ' ' . get_bloginfo_rss( 'url' ) . ' 32 32 ' . "\n"; } } /** * Returns the link for the currently displayed feed. * * @since 5.3.0 * * @return string Correct link for the atom:self element. */ function get_self_link() { $parsed = parse_url( home_url() ); $domain = $parsed['host']; if ( isset( $parsed['port'] ) ) { $domain .= ':' . $parsed['port']; } return set_url_scheme( 'http://' . $domain . wp_unslash( $_SERVER['REQUEST_URI'] ) ); } /** * Displays the link for the currently displayed feed in a XSS safe way. * * Generate a correct link for the atom:self element. * * @since 2.5.0 */ function self_link() { /** * Filters the current feed URL. * * @since 3.6.0 * * @see set_url_scheme() * @see wp_unslash() * * @param string $feed_link The link for the feed with set URL scheme. */ echo esc_url( apply_filters( 'self_link', get_self_link() ) ); } /** * Gets the UTC time of the most recently modified post from WP_Query. * * If viewing a comment feed, the time of the most recently modified * comment will be returned. * * @since 5.2.0 * * @global WP_Query $wp_query WordPress Query object. * * @param string $format Date format string to return the time in. * @return string|false The time in requested format, or false on failure. */ function get_feed_build_date( $format ) { global $wp_query; $datetime = false; $max_modified_time = false; $utc = new DateTimeZone( 'UTC' ); if ( ! empty( $wp_query ) && $wp_query->have_posts() ) { // Extract the post modified times from the posts. $modified_times = wp_list_pluck( $wp_query->posts, 'post_modified_gmt' ); // If this is a comment feed, check those objects too. if ( $wp_query->is_comment_feed() && $wp_query->comment_count ) { // Extract the comment modified times from the comments. $comment_times = wp_list_pluck( $wp_query->comments, 'comment_date_gmt' ); // Add the comment times to the post times for comparison. $modified_times = array_merge( $modified_times, $comment_times ); } // Determine the maximum modified time. $datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', max( $modified_times ), $utc ); } if ( false === $datetime ) { // Fall back to last time any post was modified or published. $datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', get_lastpostmodified( 'GMT' ), $utc ); } if ( false !== $datetime ) { $max_modified_time = $datetime->format( $format ); } /** * Filters the date the last post or comment in the query was modified. * * @since 5.2.0 * * @param string|false $max_modified_time Date the last post or comment was modified in the query, in UTC. * False on failure. * @param string $format The date format requested in get_feed_build_date(). */ return apply_filters( 'get_feed_build_date', $max_modified_time, $format ); } /** * Returns the content type for specified feed type. * * @since 2.8.0 * * @param string $type Type of feed. Possible values include 'rss', rss2', 'atom', and 'rdf'. * @return string Content type for specified feed type. */ function feed_content_type( $type = '' ) { if ( empty( $type ) ) { $type = get_default_feed(); } $types = array( 'rss' => 'application/rss+xml', 'rss2' => 'application/rss+xml', 'rss-http' => 'text/xml', 'atom' => 'application/atom+xml', 'rdf' => 'application/rdf+xml', ); $content_type = ( ! empty( $types[ $type ] ) ) ? $types[ $type ] : 'application/octet-stream'; /** * Filters the content type for a specific feed type. * * @since 2.8.0 * * @param string $content_type Content type indicating the type of data that a feed contains. * @param string $type Type of feed. Possible values include 'rss', rss2', 'atom', and 'rdf'. */ return apply_filters( 'feed_content_type', $content_type, $type ); } /** * Builds SimplePie object based on RSS or Atom feed from URL. * * @since 2.8.0 * * @param string|string[] $url URL of feed to retrieve. If an array of URLs, the feeds are merged * using SimplePie's multifeed feature. * See also {@link http://simplepie.org/wiki/faq/typical_multifeed_gotchas} * @return SimplePie\SimplePie|WP_Error SimplePie object on success or WP_Error object on failure. */ 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() ); unset( $simplepie_instance ); continue; } $feeds[] = $simplepie_instance; unset( $simplepie_instance ); } if ( ! empty( $simplepie_errors ) ) { return new WP_Error( 'simplepie-error', $simplepie_errors ); } $feed->init(); $feed->data['items'] = SimplePie\SimplePie::merge_items( $feeds ); return $feed; } $feed->set_feed_url( $url ); $feed->init(); $feed->set_output_encoding( get_bloginfo( 'charset' ) ); if ( $feed->error() ) { return new WP_Error( 'simplepie-error', $feed->error() ); } return $feed; }