Установка $wp_query->set_404()
После выполнения:
$wp_query->set_404();
WordPress:
-
устанавливает
$wp_query->is_404 = true -
сбрасывает другие флаги (is_single, is_page, is_archive и т.д.)
-
меняет внутреннее состояние запроса
✅ Как проверить, что запрос стал 404
🔹 1. Через условную функцию (рекомендуется)
if ( is_404() ) {
// это 404
}
Это самый правильный способ.
🔹 2. Через объект $wp_query
global $wp_query;
if ( $wp_query->is_404 ) {
// это 404
}
или
if ( $wp_query->is_404() ) {
// тоже работает
}
📌 Важно
После set_404():
$wp_query->is_single → false
$wp_query->is_page → false
$wp_query->is_archive → false
$wp_query->is_category → false
$wp_query->is_tag → false
$wp_query->is_404 → true
То есть WP "переквалифицирует" запрос полностью.
⚠ Частая ошибка
Если вы проверяете это внутри pre_get_posts, то is_404() работать не будет корректно, потому что:
-
pre_get_postsвыполняется ДО финального определения типа запроса -
404 логика применяется позже
Проверять 404 корректно в:
template_redirect
wp
template_include
🧠 Пример
add_action('template_redirect', function() {
if ( is_404() ) {
error_log('Это 404 страница');
}
});
🎯 Если нужно понять: вы сами установили 404 или WordPress
Можно добавить свой флаг:
global $wp_query;
$wp_query->set_404();
$wp_query->custom_en_404 = true;
И потом:
if ( !empty($wp_query->custom_en_404) ) {
// это именно ваша логика
}
No comments to display
No comments to display