Сообщения категории как элементы подменю

Долго искал на эту тему, безрезультатно. Все, что я могу найти, это решения, которые включают использование свойства Walker в wp_nav_menu, что я не думаю, что это правильный подход. Я хочу создать меню со следующей структурой:

  • Ссылка, которая является категорией

    • X numbers of submenu items which are posts belonging to the parent
      category

И так далее...

Нужно ли мне вручную запускать цикл для каждого пункта меню, чтобы получить сообщения?


person Staffan Estberg    schedule 07.01.2012    source источник


Ответы (2)


Попробуйте это в своих functions.php:

add_filter('wp_nav_menu_items', 'add_productions', 10, 2);
function add_productions($items, $args) {
  $cat = '28'; // define category
  $productions = array();
  $productions = get_posts("cat=$cat");
  if ($productions[0] != '') {
      $items .= '<li><a href="#">Productions</a><ul class="sub-menu">';
      foreach ( $productions as $production ) {
        $permalink = get_permalink( $production->ID );
        $items .= '<li><a href="'.$permalink.'">'.$production->post_title.'</a></li>';
      }
      $items .= '</ul>';
  }
  return $items;
}
person user1502677    schedule 05.07.2012

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

Большинство примеров в Интернете показывают, как добавить элемент в конец меню, это поможет вам добавить новое меню в любом месте меню.

Вот код для размещения нового меню после моего «Главного» меню:

add_filter('wp_nav_menu_items', 'add_gallery', 10, 2);
function add_gallery($items, $args) {
  $cat = '1'; // define category
  $pattern = 'Home</a></li>';
  $productions = array();
  $productions = get_posts("cat=$cat");
  $temp_items = '';
  if ($productions[0] != '') {
      $temp_items .= '<li><a href="#">Galleries</a><ul class="sub-menu">';
      foreach ( $productions as $production ) {
        $permalink = get_permalink( $production->ID );
        $temp_items .= '<li><a href="'.$permalink.'">'.$production->post_title.'</a></li>';
      }
      $temp_items .= '</ul>';
  } 
  $replacement = $pattern .$temp_items;
  $temp_menu = str_replace($pattern, $replacement, $items);
  return $temp_menu;
}

Надеюсь, это поможет кому-то еще...

person Jason Allen    schedule 01.03.2013