Tôi đã gặp một vấn đề kỳ lạ.
Giả sử bạn truy cập một url ngẫu nhiên, sâu ba cấp trở lên:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
Sau đó is_404()
là true
. Càng xa càng tốt. Nhưng vì một số lý do, bài viết cuối cùng được truy vấn.
$wp_query->request
Là
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
Mà sau đó tất nhiên làm cho have_posts()
trở lại true
và như vậy. Ai đó có thể giải thích điều này?
Những gì tôi phát hiện ra cho đến nay:
Lý do chỉ bắt đầu ở ba cấp độ trở lên là vì trước đó WP tìm kiếm các bài đăng và tệp đính kèm mà bằng cách nào đó dẫn đến một số hành vi khác.
Có vẻ như mặc dù WP nhận ra yêu cầu là 404 tại một thời điểm, sau đó nó tìm nạp các bài đăng gần đây nhất. Với sự giúp đỡ từ @kaiser và @GM, tôi đã theo dõi điều này xuống một nơi nào đó từ / wp-includes/ class-wp.php:608