我正在一个以类别作为主菜单的网站上工作。我具有新的帖子类型,并在菜单项上添加了带有标签“ City Guide”的存档内容。现在,当我在“ City Guide”页面上时,菜单项未突出显示。或者带有代码的“当前”类不在菜单项类中打印。这是我的代码:
<?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()
功能。
食典说
如果您在单个帖子上,它将返回该帖子对象如果您在页面上,它将返回页面对象如果您在存档页面上,它将返回帖子类型对象如果您在类别存档中,它将返回类别对象如果您在作者档案中,它将返回作者对象
如果您开始使用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']
);
}
页面中,category-archive
将包含类别对象,并且$qo
和$qo->term_id
将可用。
如果您位于CPT存档页面中,则$qo->parent
将包含CPT对象,并且诸如CPT $qo
,name
,query_var
等属性将可用。
因此,当您有自定义查询对象并借助label
,conditional tags
,conditional tags
,is_tax()
之类的is_tag()
时,您将能够准确确定您的位置。
P.S。必须首先检查编解码器,因为使用is_category()
]时有一些优先注意事项
is_post_type_archive()