Feeds: Prevent empty feeds from returning 404 errors.
Partial revert of [38929]. This reverts the source code from the commit for #30210 to prevent valid but empty feeds from returning 404 file not found errors for the home and custom feeds. The tests in the commit that remain applicable are retained. Props pavelevap for reporting, stevenkword for initial patch. See #30210. Fixes #39157. git-svn-id: https://develop.svn.wordpress.org/trunk@40030 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
860e7ccccd
commit
99a101ff27
@ -1213,18 +1213,6 @@ function bool_from_yn( $yn ) {
|
|||||||
function do_feed() {
|
function do_feed() {
|
||||||
global $wp_query;
|
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' );
|
$feed = get_query_var( 'feed' );
|
||||||
|
|
||||||
// Remove the pad, if present.
|
// Remove the pad, if present.
|
||||||
|
@ -457,41 +457,4 @@ class Tests_Feeds_RSS2 extends WP_UnitTestCase {
|
|||||||
// There should only be one <rss> child element.
|
// There should only be one <rss> child element.
|
||||||
$this->assertEquals( 1, count( $rss ) );
|
$this->assertEquals( 1, count( $rss ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Check to make sure we are not rendering feed templates for invalid feed endpoints.
|
|
||||||
* e.g. https://example.com/wp-content/feed/
|
|
||||||
*
|
|
||||||
* @ticket 30210
|
|
||||||
*/
|
|
||||||
function test_invalid_feed_endpoint() {
|
|
||||||
// An example of an invalid feed endpoint
|
|
||||||
$this->go_to( 'wp-content/feed/' );
|
|
||||||
|
|
||||||
// Queries performed on invalid feed endpoints should never contain posts.
|
|
||||||
$this->assertFalse( have_posts() );
|
|
||||||
|
|
||||||
// This is the assertion. Once the exception is thrown in do_feed, execution stops, preventing futher assertions.
|
|
||||||
$this->setExpectedException( 'WPDieException', 'ERROR: This is not a valid feed.' );
|
|
||||||
do_feed();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure the requested feed is registered before rendering the requested template.
|
|
||||||
*
|
|
||||||
* @ticket 30210
|
|
||||||
*/
|
|
||||||
function test_nonexistent_feeds() {
|
|
||||||
global $wp_rewrite;
|
|
||||||
$badfeed = 'badfeed';
|
|
||||||
|
|
||||||
$this->assertNotContains( $badfeed, $wp_rewrite->feeds );
|
|
||||||
|
|
||||||
$this->go_to( '/?feed=' . $badfeed );
|
|
||||||
|
|
||||||
// This is the assertion. Once the exception is thrown in do_feed, execution stops, preventing futher assertions.
|
|
||||||
$this->setExpectedException( 'WPDieException', 'ERROR: This is not a valid feed template.' );
|
|
||||||
do_feed();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user