Je suis tombé sur un problème étrange.
Supposons que vous accédez à une URL aléatoire, à trois niveaux ou plus de profondeur:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
Alors is_404()
est true
. Jusqu'ici tout va bien. Mais pour une raison quelconque, les derniers messages sont interrogés.
$wp_query->request
est
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
Ce qui fait alors bien sûr le have_posts()
retour true
et ainsi de suite. Quelqu'un peut-il expliquer cela?
Ce que j'ai découvert jusqu'à présent:
La raison qui ne se déclenche qu'à trois niveaux ou plus est qu'avant que WP recherche les publications et les pièces jointes, ce qui entraîne en quelque sorte un autre comportement.
Il semble que même si WP reconnaît la demande comme un 404 à un moment donné, il récupère ensuite les messages les plus récents. Avec l'aide de @kaiser et @GM, je l'ai retrouvé quelque part dans /wp-includes/class-wp.php:608