Неисправность выделения правильного родительского меню с помощью классов wp_nav_menu при просмотре «отдельных сообщений» - PullRequest
1 голос
/ 02 августа 2011

Я только что обновил меню на моем сайте, чтобы использовать 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 решил вместо этого добавить текущие классы.

Example 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>

1 Ответ

0 голосов
/ 04 августа 2011

Полагаю, проблема в том, что вы задали страницу поста как Блог, а WordPress установил его как родительский (в вашем меню) для всех постов.Вы можете попытаться изменить это поведение с помощью wp_get_nav_menu_items hook.Пример:

function my_menu_items_hook($items, $menu, $args) {

  if ( 'my-menu-slug' == $menu->slug ) { // check if it is process your top menu
    if ( is_single() ) { // check if single post loaded

      if ( in_category(EVENT_CATEGORY_ID) || in_category(MEDIA_CATEGORY_ID) ) {
        foreach ( $items as $key => $value ) {
          if ( BLOG_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = array(); //unset classes for blog item
          }

          // add class if post from event category
          if ( in_category(EVENT_CATEGORY_ID) && EVENT_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = 'current-menu-item';
          }

          // add class if post from media category
          if ( in_category(MEDIA_CATEGORY_ID) && MEDIA_PAGE_ID == $value->object_id ) {
            $items[$key]->classes[] = 'current-menu-item';
          }
        }
      }
    }
  }

  return $items;
}

add_action('wp_get_nav_menu_items', 'my_menu_items_hook', 10, 3);

Вы должны заменить EVENT_CATEGORY_ID и MEDIA_CATEGORY_ID на свои идентификаторы (или имена) категории.Также замените EVENT_PAGE_ID и MEDIA_PAGE_ID на свои идентификаторы страниц.Замените 'my-menu-slug' на slug вашего меню.

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

Обновлено.

...