Natknąłem się na dziwny problem.
Załóżmy, że masz dostęp do losowego adresu URL o głębokości co najmniej trzech poziomów:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
To is_404()
jest true
. Na razie w porządku. Ale z jakiegoś powodu sprawdzane są ostatnie posty.
$wp_query->request
jest
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
Który wtedy oczywiście have_posts()
powraca true
i tak dalej. Czy ktoś może to wyjaśnić?
Co do tej pory się dowiedziałem:
Powodem, dla którego uruchamia się tylko na trzech lub więcej poziomach głębokości, jest to, że wcześniej WP szuka postów i załączników, które w jakiś sposób skutkują jakimś innym zachowaniem.
Wygląda na to, że chociaż WP rozpoznaje żądanie jako 404 w pewnym momencie, pobiera najnowsze posty. Z pomocą @kaiser i @GM wyśledziłem to gdzieś z /wp-includes/class-wp.php:608