我刚刚更新了我网站上的一个菜单以使用 wp_nav_menu。使用 WP 进行设置非常简单,但是我遇到了一个小障碍,因为 wordpress 输出其父/祖先类以用于突出显示内容所属的当前页面,尤其是单个帖子页面.. .
突出显示当前页面,只要它只是在带有孩子的普通页面上,就可以完美地工作,.current_page_item a
但是一旦您访问来自事件或媒体的帖子,菜单中的博客链接就会突出显示,这显然是不正确的。.current_page_parent a
*在查看 Wordpress 的输出时,明显错误的一件事是,当前页面类甚至没有在帖子所属的正确li 标签上生成,这似乎是问题的根源。
为了将来参考,事件、媒体和博客页面都使用了我编写的特殊查询,以仅获取该页面的相应类别,即。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("category_name=media&paged=$paged");
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="post">
</div>
<?php
endwhile;
else:
endif;
希望那是足够的信息,如果不让我知道。最佳,某人
编辑 - 2011 年 8 月 3 日
下面是我说 wp_nav_menu 在错误的 li 标签上生成当前类时所指的屏幕截图。蓝色突出显示的是帖子实际所属的菜单项。以灰色突出显示的是 wordpress 决定将当前类添加到的不正确的 li 标签。
http://img688.imageshack.us/img688/4180/picture2zo.png
编辑 - 2011 年 8 月 4 日
也许这将有助于展示我到目前为止如何在 Hadvig 的帮助下更好地设置菜单?
在我的functions.php模板中,我有 -
<?php
// Add Custom Menu Support
if ( function_exists( 'register_nav_menu' ) ) {
register_nav_menu( 'epr_menu', 'EPR Main Menu' );
}
function my_menu_items_hook($items, $menu, $args) {
if ( 'epr_menu' == $menu->slug ) { // check if it is process your top menu
if ( is_single() ) { // check if single post loaded
if ( in_category('events') || in_category('media') ) {
foreach ( $items as $key => $value ) {
if ( 'blog' == $value->ID ) {
$items[$key]->classes[] = array(); //unset classes for blog item
}
// add class if post from event category
if ( in_category('events') && 'events' == $value->ID ) {
$items[$key]->classes[] = 'current-menu-item';
}
// add class if post from media category
if ( in_category('media') && 'media' == $value->ID ) {
$items[$key]->classes[] = 'current-menu-item';
}
}
}
}
}
return $items;
}
add_action('wp_get_nav_menu_items', 'my_menu_items_hook', 10, 3);
?>
在我的header.php模板中,我这样调用菜单 -
<div id="nav_wrapper">
<ul id="nav">
<?php wp_nav_menu( array( 'container' => '', 'items_wrap' => '%3$s' ) ); ?>
</ul>
</div>