get_categories возвращает категории верхнего уровня вместо дочерних категорий

Я сделал базовое навигационное меню подкатегории, используя приведенный ниже код.

Проблема заключается в одной категории (без детей), она возвращает категории верхнего уровня как дети, например: Новости, Без рубрики и т. Д. (Я попытался назначить дочернюю категорию, и она фактически исчезает из меню, а не фиксирует вещи)

Что может быть причиной этого?

function display_category_breadcrumbs () { $current_cat_id = get_cat_id( single_cat_title("",false) ); $parent_cats = get_categories('parent='.$current_cat_id); ?> <ul id="cat-breadcrumb"> <?php foreach ($parent_cats as $sub_category ) { echo '<li><a href="'. esc_url( get_category_link( $sub_category->term_id) ) . '">' . esc_html( $sub_category->cat_name) . '</a></li>'; } ?> </ul> <?php } 

Solutions Collecting From Web of "get_categories возвращает категории верхнего уровня вместо дочерних категорий"

Я считаю, что то, что вы видите, – это ожидаемое поведение, когда parent равен 0 что возвращает get_cat_id() если ему не удалось найти идентификатор категории для аргумента $cat_name . Вы можете быстро протестировать это, поставив var_dump($current_cat_id); в любое время после того, как вы установите его, чтобы увидеть, правильно ли это предположение. Если это так, вам нужно выяснить, почему вы не получаете $current_cat_id .

То, как вы делаете это сейчас, кажется мне довольно уязвимым, хотя его трудно узнать без дополнительного контекста. Я бы посмотрел, чтобы получить идентификатор непосредственно из get_the_terms() если вы находитесь в одиночных сообщениях или, может быть, с get_query_var() если на странице с временным архивом.

Тангенциально ваш код не должен работать вообще, если то, что вы вставили, неотредактировано, так как ваш оператор if не имеет теста для выполнения.