Текущий пункт меню Nav не выделен

Я работал над сайтом с категориями в качестве основного меню. У меня новый тип записи и я добавил содержимое архива в качестве элемента меню с меткой «Путеводитель по городу». Теперь, когда я на странице «Путеводитель по городу», этот пункт меню не выделяется. Или с кодом класс ‘текущий’ не печатает в классе пункта меню. Вот мой код:

 <?php
$menu_name = PRIMARY_NAVIGATION_NAME;
$menu_items = array();
if( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ){
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = $menu ? wp_get_nav_menu_items($menu->term_id) : array();
}
?>
<nav class="visible-sm visible-md visible-lg" role="navigation">
<ul id="menu-primary-navigation" class="main-navigation">
<?php if( !empty($menu_items) ): ?>
<?php
$current_category_object = null;
if( !empty($wp_query->query_vars['category_name']) ){
$category_name = $wp_query->query_vars['category_name'];
$current_category_object = get_category_by_slug($wp_query->query_vars['category_name']);
}
?>
<?php foreach( $menu_items as $item): ?>
<?php
$active_class = false;
if ($item->object == 'category' && !empty($current_category_object) ){
$cat_object = get_category($item->object_id);
if ($cat_object->term_id == $current_category_object->term_id || $cat_object->term_id == $current_category_object->parent) {
$active_class = true;
}
}
?>
<li class="<?php echo sanitize_title($item->title); ?><?php echo ' menu-item-object-category'; if ($active_class) echo ' current'?>">
<a href="<?php echo $item->url; ?>" class="main-category"<?php if( $item->target) echo ' target="' . $item->target . '"'; ?>><?php echo $item->title ?></a>
<?php if( $item->object == 'category'): ?>
<?php
$sub_categories = get_terms( array('category'), array('child_of' => $item->object_id, 'hide_empty' => 0) );
if (count($sub_categories) <= 4) {
include(locate_template('partials/sub-menu-two-featured.php'));
} else {
include(locate_template('partials/sub-menu-one-featured.php'));
}
?>
<?php endif; ?>

<?php if ($item->title == 'City Guide'): ?>
<?php include(locate_template('partials/sub-menu-city-guide.php')); ?>
<?php endif; ?>
</li>
<?php wp_reset_query(); ?>
<?php endforeach; ?>
<?php endif; ?>
</ul>
</nav>

Как я могу реализовать это в нем, используя условие, чтобы добавить текущий пункт меню моей страницы архива в приведенном выше коде.

Я старался

 <?php if ($item->title == 'City Guide'): ?>

но это было эхом во всех случаях, а не когда меню активно.
Пожалуйста помоги.

1

Решение

Одним из возможных решений является использование get queried object() функция кодекс

Кодекс говорит

если вы находитесь на одном посте, он вернет объект поста
если вы находитесь на странице, он вернет объект страницы
если вы находитесь на странице архива, он вернет объект типа записи
если вы находитесь в архиве категорий, он вернет объект категории
если вы находитесь в архиве автора, он вернет объект автора

Если вы начнете использовать $qo = get_queried_object() тогда нет необходимости использовать этот код

if( !empty($wp_query->query_vars['category_name']) ){
$category_name = $wp_query->query_vars['category_name'];
$current_category_object = get_category_by_slug($wp_query->query_vars['category_name']);
}

потому что, если вы находитесь на странице архива категории, $qo будет содержать объект категории, и $qo->term_id а также $qo->parent будет доступно.

Если вы находитесь на странице архива CPT, то $qo будет содержать объект CPT и такие свойства, как CPT name, query_var, label и так далее будет доступно.

Так что, когда у вас есть пользовательский запрашиваемый объект и с помощью некоторых conditional_tags условные метки лайк is_tax(), is_tag(), is_category(), is_post_type_archive() Вы сможете точно определить, где вы находитесь.

Постскриптум Вы должны сначала проверить кодекс, потому что есть некоторые примечания для приоритета при использовании get_queried_object()

1

Другие решения

<?php
$active_class = false;
$this_category = get_queried_object();
$this_category->name;
if ($this_category->name == 'city-guide' ){
$active_class = true;
} ?>
<li class="<?php echo sanitize_title($item->title); ?><?php echo ' menu-item-object-category'; if ($active_class ==1 && sanitize_title($item->title) =='city-guide') echo ' current'; ?>">

это сработало, спасибо @pgk за указание на меня

0

По вопросам рекламы [email protected]