Mi sono imbattuto in uno strano problema.
Supponi di accedere a un URL casuale, con tre o più livelli di profondità:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
Quindi lo is_404()
è true
. Fin qui tutto bene. Ma per qualche motivo vengono interrogati gli ultimi post.
$wp_query->request
è
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
Che poi ovviamente fa have_posts()
ritorno true
e così via. Qualcuno può spiegare questo?
Quello che ho scoperto finora:
La ragione per cui entra in gioco solo a tre o più livelli di profondità è che prima di allora WP cerca post e allegati che in qualche modo si traducono in qualche altro comportamento.
Sembra che anche se WP riconosce la richiesta come 404 a un certo punto, recupera i post più recenti. Con l'aiuto di @kaiser e @GM ho rintracciato questo da qualche parte da /wp-includes/class-wp.php:608