WordPress Version: 4.7
/**
* Load the feed template from the use of an action hook.
*
* If the feed action does not have a hook, then the function will die with a
* message telling the visitor that the feed is not valid.
*
* It is better to only have one hook for each feed.
*
* @since 2.1.0
*
* @global WP_Query $wp_query Used to tell if the use a comment feed.
*/
function do_feed()
{
global $wp_query;
// Determine if we are looking at the main comment feed
$is_main_comments_feed = $wp_query->is_comment_feed() && !$wp_query->is_singular();
/*
* Check the queried object for the existence of posts if it is not a feed for an archive,
* search result, or main comments. By checking for the absense of posts we can prevent rendering the feed
* templates at invalid endpoints. e.g.) /wp-content/plugins/feed/
*/
if (!$wp_query->have_posts() && !($wp_query->is_archive() || $wp_query->is_search() || $is_main_comments_feed)) {
wp_die(__('ERROR: This is not a valid feed.'), '', array('response' => 404));
}
$feed = get_query_var('feed');
// Remove the pad, if present.
$feed = preg_replace('/^_+/', '', $feed);
if ($feed == '' || $feed == 'feed') {
$feed = get_default_feed();
}
if (!has_action("do_feed_{$feed}")) {
wp_die(__('ERROR: This is not a valid feed template.'), '', array('response' => 404));
}
/**
* Fires once the given feed is loaded.
*
* The dynamic portion of the hook name, `$feed`, refers to the feed template name.
* Possible values include: 'rdf', 'rss', 'rss2', and 'atom'.
*
* @since 2.1.0
* @since 4.4.0 The `$feed` parameter was added.
*
* @param bool $is_comment_feed Whether the feed is a comment feed.
* @param string $feed The feed name.
*/
do_action("do_feed_{$feed}", $wp_query->is_comment_feed, $feed);
}