Есть ли причина, по которой я не могу получить текущую категорию в цикле?

Я думаю, что делаю это неправильно, но если да,

if(have_posts()){ $category_id = get_query_var('cat'); var_dump($category_id); while (have_posts()){ the_post(); } } 

var dump возвращается пустым. Зачем? Есть ли лучший способ получить текущий объект категории в цикле? тот же вопрос относится к тегам. Могу ли я также получить текущий объект тега, если это был is_tag() ?

get_query_var получит категорию из основного запроса, и она будет настроена только для некоторых страниц, таких как архивы категорий. Он не установлен для «одиночных» страниц или архивов тегов или многих других «страниц».

Значение, возвращаемое get_query_var похоже на переменную поиска. Он будет установлен, когда запрос будет запрошен для поиска сообщений в определенной категории. Он не отражает значение текущей должности в Loop, хотя, конечно, если get_query_var('cat') установлен, все должности должны быть назначены этой категории.

То, что вы хотите получить для текущей записи в Loop, является get_the_category , но оно должно появиться после the_post . get_the_tags будет делать то же самое для тегов, и более общие get_the_terms могут использоваться для любой таксономии.