mirror of
https://github.com/WordPress/WordPress.git
synced 2025-01-03 06:57:35 +01:00
Query: Simplify the logic in WP::handle_404()
to allow for easier modifications.
See #45337. Built from https://develop.svn.wordpress.org/trunk@47738 git-svn-id: http://core.svn.wordpress.org/trunk@47514 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
25c841026d
commit
4abdb06f72
@ -623,13 +623,13 @@ class WP {
|
||||
/**
|
||||
* Set the Headers for 404, if nothing is found for requested URL.
|
||||
*
|
||||
* Issue a 404 if a request doesn't match any posts and doesn't match
|
||||
* any object (e.g. an existing-but-empty category, tag, author) and a 404 was not already
|
||||
* issued, and if the request was not a search or the homepage.
|
||||
* Issue a 404 if a request doesn't match any posts and doesn't match any object
|
||||
* (e.g. an existing-but-empty category, tag, author) and a 404 was not already issued,
|
||||
* and if the request was not a search or the homepage.
|
||||
*
|
||||
* Otherwise, issue a 200.
|
||||
*
|
||||
* This sets headers after posts have been queried. handle_404() really means "handle status."
|
||||
* This sets headers after posts have been queried. handle_404() really means "handle status".
|
||||
* By inspecting the result of querying posts, seemingly successful requests can be switched to
|
||||
* a 404 so that canonical redirection logic can kick in.
|
||||
*
|
||||
@ -660,68 +660,64 @@ class WP {
|
||||
return;
|
||||
}
|
||||
|
||||
// Never 404 for the admin, robots, favicon, or if we found posts.
|
||||
if ( is_admin() || is_robots() || is_favicon() || $wp_query->posts ) {
|
||||
$set_404 = true;
|
||||
|
||||
$success = true;
|
||||
if ( is_singular() ) {
|
||||
$p = false;
|
||||
// Never 404 for the admin, robots, or favicon.
|
||||
if ( is_admin() || is_robots() || is_favicon() ) {
|
||||
$set_404 = false;
|
||||
|
||||
if ( $wp_query->post instanceof WP_Post ) {
|
||||
$p = clone $wp_query->post;
|
||||
}
|
||||
// If posts were found, check for paged content.
|
||||
} elseif ( $wp_query->posts ) {
|
||||
$content_found = true;
|
||||
|
||||
$post = isset( $wp_query->post ) ? $wp_query->post : null;
|
||||
|
||||
// Only set X-Pingback for single posts that allow pings.
|
||||
if ( $p && pings_open( $p ) && ! headers_sent() ) {
|
||||
if ( is_singular() && $post && pings_open( $post ) && ! headers_sent() ) {
|
||||
header( 'X-Pingback: ' . get_bloginfo( 'pingback_url', 'display' ) );
|
||||
}
|
||||
|
||||
// Check for paged content that exceeds the max number of pages.
|
||||
if ( is_singular() ) {
|
||||
$next = '<!--nextpage-->';
|
||||
if ( $p && ! empty( $this->query_vars['page'] ) ) {
|
||||
if ( $post && ! empty( $this->query_vars['page'] ) ) {
|
||||
// Check if content is actually intended to be paged.
|
||||
if ( false !== strpos( $p->post_content, $next ) ) {
|
||||
if ( false !== strpos( $post->post_content, $next ) ) {
|
||||
$page = trim( $this->query_vars['page'], '/' );
|
||||
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
|
||||
$content_found = (int) $page <= ( substr_count( $post->post_content, $next ) + 1 );
|
||||
} else {
|
||||
$success = false;
|
||||
$content_found = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( $success ) {
|
||||
status_header( 200 );
|
||||
return;
|
||||
}
|
||||
if ( $content_found ) {
|
||||
$set_404 = false;
|
||||
}
|
||||
|
||||
// We will 404 for paged queries, as no posts were found.
|
||||
if ( ! is_paged() ) {
|
||||
} elseif ( ! is_paged() ) {
|
||||
$author = get_query_var( 'author' );
|
||||
|
||||
// Don't 404 for authors without posts as long as they matched an author on this site.
|
||||
$author = get_query_var( 'author' );
|
||||
if ( is_author() && is_numeric( $author ) && $author > 0 && is_user_member_of_blog( $author ) ) {
|
||||
status_header( 200 );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_author() && is_numeric( $author ) && $author > 0 && is_user_member_of_blog( $author )
|
||||
// Don't 404 for these queries if they matched an object.
|
||||
if ( ( is_tag() || is_category() || is_tax() || is_post_type_archive() ) && get_queried_object() ) {
|
||||
status_header( 200 );
|
||||
return;
|
||||
}
|
||||
|
||||
|| ( is_tag() || is_category() || is_tax() || is_post_type_archive() ) && get_queried_object()
|
||||
// Don't 404 for these queries either.
|
||||
if ( is_home() || is_search() || is_feed() ) {
|
||||
status_header( 200 );
|
||||
return;
|
||||
|| is_home() || is_search() || is_feed()
|
||||
) {
|
||||
$set_404 = false;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $set_404 ) {
|
||||
// Guess it's time to 404.
|
||||
$wp_query->set_404();
|
||||
status_header( 404 );
|
||||
nocache_headers();
|
||||
} else {
|
||||
status_header( 200 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -13,7 +13,7 @@
|
||||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.5-alpha-47737';
|
||||
$wp_version = '5.5-alpha-47738';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
Loading…
Reference in New Issue
Block a user