Я натрапив на дивну проблему.
Скажімо, ви отримуєте доступ до випадкової URL-адреси глибиною трьох або більше рівнів:
http://example.com/a/b/c
http://example.com/a/b/c/d
...
Тоді is_404()
є true
. Все йде нормально. Але чомусь останні повідомлення запитуються.
$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
Що потім, звичайно, робить have_posts()
повернення true
тощо. Хтось може це пояснити?
Що я дізнався поки що:
Причина, яка забивається лише на трьох і більше рівнях, полягає в тому, що перед цим WP шукає повідомлення та вкладення, що певним чином призводить до іншої поведінки.
Здається, що навіть незважаючи на те, що WP розпізнає запит як номер 404, він отримує найсвіжіші повідомлення. За допомогою @kaiser та @GM я відстежив це десь з /wp-includes/class-wp.php:608