从菜单显示当前导航路径

时间:2012-04-27 作者:testing

我想要这样的东西

Home > Products > Steel > Nails

此信息应来自菜单结构!我安装了breadcrumbnavxt,但它似乎只采用我定义的路径(这是父路径,依此类推)。但我需要的是菜单结构,而不是用户。我是否必须为每个页面设置父页面,或者是否有从菜单中读取层次结构的解决方案?我没有找到seeting Breadcrumb NavXT,似乎我必须为此编写一个PHP脚本。

Edit:对于我的后续问题,我添加了以下代码:

if(in_array(\'current-menu-item\', $item->classes)){
    $attributes .= \' class="active"\';
}

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

最好的方法是wp_nav_menu 带着一个定制的助行器。

先决条件:

  • Registered theme location
  • 菜单保存到该主题位置
    • 在需要面包屑的任何位置使用(用于主题位置“primary”):

      <?php wp_nav_menu( array( 
          \'container\' => \'none\', 
          \'theme_location\' => \'primary\',
          \'walker\'=> new SH_BreadCrumbWalker, 
          \'items_wrap\' => \'<div id="breadcrumb-%1$s" class="%2$s">%3$s</div>\'
       ) ); ?>
      
      定制助行器这是非常基本的。(这可以通过另一种方式完成-覆盖display_element 相反?-但我发现这是最直接的)。这应该住在你的functions.php

      class SH_BreadCrumbWalker extends Walker{
          /**
           * @see Walker::$tree_type
           * @var string
           */
          var $tree_type = array( \'post_type\', \'taxonomy\', \'custom\' );
      
          /**
           * @see Walker::$db_fields
           * @var array
           */
          var $db_fields = array( \'parent\' => \'menu_item_parent\', \'id\' => \'db_id\' );
      
          /**
           * delimiter for crumbs
           * @var string
           */
          var $delimiter = \' > \';
      
          /**
           * @see Walker::start_el()
           *
           * @param string $output Passed by reference. Used to append additional content.
           * @param object $item Menu item data object.
           * @param int $depth Depth of menu item.
           * @param int $current_page Menu item ID.
           * @param object $args
           */
          function start_el(&$output, $item, $depth, $args) {
      
              //Check if menu item is an ancestor of the current page
              $classes = empty( $item->classes ) ? array() : (array) $item->classes;
              $current_identifiers = array( \'current-menu-item\', \'current-menu-parent\', \'current-menu-ancestor\' ); 
              $ancestor_of_current = array_intersect( $current_identifiers, $classes );     
      
      
              if( $ancestor_of_current ){
                  $title = apply_filters( \'the_title\', $item->title, $item->ID );
      
                  //Preceed with delimter for all but the first item.
                  if( 0 != $depth )
                      $output .= $this->delimiter;
      
                  //Link tag attributes
                  $attributes  = ! empty( $item->attr_title ) ? \' title="\'  . esc_attr( $item->attr_title ) .\'"\' : \'\';
                  $attributes .= ! empty( $item->target )     ? \' target="\' . esc_attr( $item->target     ) .\'"\' : \'\';
                  $attributes .= ! empty( $item->xfn )        ? \' rel="\'    . esc_attr( $item->xfn        ) .\'"\' : \'\';
                  $attributes .= ! empty( $item->url )        ? \' href="\'   . esc_attr( $item->url        ) .\'"\' : \'\';
      
                  //Add to the HTML output
                  $output .= \'<a\'. $attributes .\'>\'.$title.\'</a>\';
              }
          }
      }
      

结束