Как работают is_category() и is_tag()
Они становятся true, если текущий запрос определён как:
-
архив категории →
is_category() === true -
архив метки →
is_tag() === true
🔎 Что происходит при запросе архива
Например URL:
После rewrite WordPress превращает это во внутренний запрос:
или
Далее WP_Query анализирует параметры и выставляет флаги:
или
И только после этого начинают работать:
⚠ Важно: где они работают корректно
-
после того как WordPress разобрал запрос
-
внутри
pre_get_posts -
внутри
template_redirect -
внутри шаблонов
❌ Они НЕ работают корректно внутри init, потому что запрос ещё не разобран.
📌 Почему лучше проверять через $query
В pre_get_posts безопаснее писать так:
add_action('pre_get_posts', function ($query) {
if (is_admin() || !$query->is_main_query()) {
return;
}
if (
get_query_var('lang') === 'en' &&
( $query->is_category() || $query->is_tag() )
) {
...
}
});
Почему?
Потому что:
-
глобальная
is_category()работает через$wp_query -
внутри
pre_get_postsмы должны работать с конкретным$query
Это более правильно архитектурно.
📌 Что именно проверяет is_category()
По сути это проверка:
Если хотите проверить руками:
💡 Итог
is_category() и is_tag():
-
зависят от разобранного запроса
-
работают после
parse_query -
безопасны в
pre_get_postsи позже -
не зависят от вашего
lang, если rewrite правильный
No comments to display
No comments to display