Me encontré con un problema extraño.
Supongamos que accede a una URL aleatoria, con tres o más niveles de profundidad:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
Entonces, is_404()
es true
. Hasta ahora tan bueno. Pero por alguna razón se consultan los últimos mensajes.
$wp_query->request
es
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (
wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private'
)
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5
Lo que, por supuesto, hace have_posts()
return true
y así sucesivamente. ¿Alguien puede explicar esto?
Lo que descubrí hasta ahora:
La razón por la que solo se inicia en tres o más niveles de profundidad es que antes de eso, WP busca publicaciones y archivos adjuntos que de alguna manera resultan en algún otro comportamiento.
Parece que a pesar de que WP reconoce la solicitud como un 404 en un momento dado, recupera las publicaciones más recientes. Con la ayuda de @kaiser y @ GM He rastreado esto en algún lugar de / wp-includes / class-wp.php: 608