导航菜单当前项目未突出显示
Nav menu current item not highlihting
我在一个以类别作为主菜单的网站上工作。我有一个新的 post 类型并添加了一个存档内容作为带有标签 'City Guide' 的菜单项。现在当我在城市指南页面上时菜单项不是 highlighting.Or 代码 class 'current' 未在菜单项中打印 class.Here 是我的代码:
<?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'): ?>
但它在所有情况下都在回显,而不是在菜单处于活动状态时。
请帮忙
一个可能的解决方案是为此使用 get_queried_object()
函数。
食典说
if you're on a single post, it will return the post object
if you're on a page, it will return the page object
if you're on an archive page, it will return the post type object
if you're on a category archive, it will return the category object
if you're on an author archive, it will return the author 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']
);
}
因为:
如果您在category-archive
页面,$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()
时,您将能够准确地确定你在哪里。
P.S. 一定要先看codex,因为在使用get_queried_object()
的时候有一些注意事项
<?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 指出我的意见
我在一个以类别作为主菜单的网站上工作。我有一个新的 post 类型并添加了一个存档内容作为带有标签 'City Guide' 的菜单项。现在当我在城市指南页面上时菜单项不是 highlighting.Or 代码 class 'current' 未在菜单项中打印 class.Here 是我的代码:
<?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'): ?>
但它在所有情况下都在回显,而不是在菜单处于活动状态时。 请帮忙
一个可能的解决方案是为此使用 get_queried_object()
函数。
食典说
if you're on a single post, it will return the post object
if you're on a page, it will return the page object
if you're on an archive page, it will return the post type object
if you're on a category archive, it will return the category object
if you're on an author archive, it will return the author 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']
);
}
因为:
如果您在
category-archive
页面,$qo
将包含类别对象,$qo->term_id
和$qo->parent
将可用。如果您在 CPT 存档页面,那么
$qo
将包含 CPT 对象,以及 CPTname
、query_var
、label
等属性等等将可用。
因此,当您拥有自定义查询对象并借助某些 conditional tags
(例如 is_tax()
、is_tag()
、is_category()
、is_post_type_archive()
时,您将能够准确地确定你在哪里。
P.S. 一定要先看codex,因为在使用get_queried_object()
<?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 指出我的意见