Я только что обновил меню на моем сайте, чтобы использовать wp_nav_menu. Настроить это с помощью WP было довольно просто, однако я столкнулся с одной небольшой трудностью, связанной с тем, как wordpress выводит классы своего родителя / предка для использования при выделении текущей страницы, к которой принадлежит контент, , особенно с одним постом. страниц ...
Подсветка текущей страницы с помощью .current_page_item a
и .current_page_parent a
работает идеально, если только на обычной странице с детьми, , однако, как только вы посещаете сообщение из событий или media , вместо этого в меню выделена ссылка на блог, что явно неверно .
* При просмотре выходных данных 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;
Надеюсь, хватит информации, если не, дайте мне знать.
Лучший,
SB
РЕДАКТ. - 3 августа 2011 г.
Ниже приведен снимок экрана того, на что я ссылаюсь, когда я говорю, что wp_nav_menu генерирует текущие классы с неправильным тегом li. Выделенный синим цветом - это пункт меню, к которому фактически относится публикация. Hightlighted in Grey - это неправильный тег li, к которому WordPress решил вместо этого добавить текущие классы.
http://img688.imageshack.us/img688/4180/picture2zo.png
РЕДАКТИРОВАТЬ - 4 августа 2011 г.
Может быть, это поможет продемонстрировать, как у меня пока настроение меню немного лучше с помощью Хадвига?
В моем 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>