Walker类是如何工作的?

时间:2014-12-01 作者:Karun

有人能给我解释一下Walker Class 作品类中的方法是否总是需要重载父方法?

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

我搜索并阅读了有关沃克课程的信息。我运行测试,玩弄代码,终于明白了。我希望这也能对其他人有所帮助。

为此,需要实现walker类。

这里有一个简单的例子。

$defaults = array(
          \'theme_location\'  => \'primary\',
          \'container\'       => \'ul\',
          \'menu_class\'      => \'nav navbar-nav main-nav\',
          \'walker\'          => new Primary_Walker_Nav_Menu()
);

wp_nav_menu( $defaults );
在上述代码块中wp_nav_menu() 函数takes$defaults 因为这是一个论点。在阵列中$defaults, 最后一个键是walker. walker键的值是类的对象Primary_Walker_Nav_Menu.

在里面functions.php 执行以下代码。

class Primary_Walker_Nav_Menu extends Walker_Nav_Menu {
  function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    if ( array_search( \'menu-item-has-children\', $item->classes ) ) {
      $output .= sprintf(
        "\\n<li class=\'dropdown %s\'><a href=\'%s\' class=\'dropdown-toggle\' 
        data-toggle=\'dropdown\'>%s</a>\\n", 
        ( array_search( \'current-menu-item\', $item->classes ) || 
          array_search( \'current-page-parent\', $item->classes ) ) 
         ? \'active\' : \'\', $item->url, $item->title );
    } else {
       $output .= sprintf( "\\n<li %s><a href=\'%s\'>%s</a>\\n", 
         ( array_search( \'current-menu-item\', $item->classes) ) 
         ? \' class="active"\' : \'\', $item->url, $item->title );
    }
  }

  function start_lvl( &$output, $depth ) {
    $indent = str_repeat( "\\t", $depth );
    $output .= "\\n$indent<ul class=\\"dropdown-menu\\" role=\\"menu\\">\\n";
  }
}
这个start_el() 方法用于为单个树项目(例如<li>, <span>, 或<a>) 到$output.

这个start_lvl() 方法在walker到达新的;“分支机构”;在树结构中。通常,此方法用于添加容器HTML元素的开始标记(例如<ol>, <ul>, 或<div>) 到$output.

上述实现的输出将生成以下html代码块。

<ul id="menu-main-navigation" class="nav navbar-nav main-nav">
  <li class="dropdown ">
    <a href="http://karunshakya.com.np/services/" class="dropdown-toggle">Services</a>
    <ul class="dropdown-menu" role="menu">
      <li><a href="http://example.com/services/recrutement/">Sélection et recrutement</a></li>
      <li><a href="http://example.com/services/personnel/">Mise disposition de personnel</a></li>
      <li><a href="http://example.com/services/salaire/">Gestion de salaire</a></li>
    </ul>
  </li>
  <li><a href="http://example.com/news/">News</a></li>
  <li><a href="http://example.com/medias/">Medias</a></li>
  <li class="last-child"><a href="http://example.com/contactez/">Contactez-nous</a></li>
</ul>
下面的链接解释了如何使用walker类:http://code.tutsplus.com/tutorials/understanding-the-walker-class--wp-25401

结束

相关推荐

在Walker函数中使用Menu类

是否使用选项中打开的自定义菜单css类,通过walker函数将这些类应用于span 而不是li\'s?我的定制助行器:class ik_walker extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $GLOBALS[\'ik_walker_counter\'] = 0; $output .= \'<nav class=\"site-nav