如何有条件地向startlvl()函数添加属性?

时间:2015-06-11 作者:pershianix

我想在子元素的容器div中添加父元素的id。我该怎么做?这是我的代码:

<?php
  public function start_lvl( &$output, $depth = 0, $args = array() ) {
    $indent = str_repeat( "\\t", $depth );
    $output .= "\\n$indent<ul id=\\"Here I want to tell wordpress to put the ID of parent element\\" class=\\"collapse\\">\\n";
  }

1 个回复
SO网友:s_ha_dum

您在中没有所需的数据start_lvl() 方法来执行此操作。该数据可在start_el() 中的方法$item 变量,因此您必须制定一种方法来传递该数据:

class my_extended_walker extends Walker_Nav_Menu {

  var $prnt = 0;
  var $pdepth = false;

  public function start_lvl( &$output, $depth = 0, $args = array() ) {
    $id = \'\';
    if (!empty($this->prnt)) {
      $id = \'id="prnt-\'.$this->prnt.\'"\';
    }
    $indent = str_repeat( "\\t", $depth );
    $output .= "\\n$indent<ul $id class=\\"collapse\\">\\n";
  }

  public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    if ($this->pdepth !== $depth) {
      $this->prnt = $item->ID;
      $this->pdepth = $depth;
    } else {
      $this->prnt = $this->pdepth = 0;
    }
    parent::start_el($output,$item,$depth,$args,$id);
  }
}
// testing
wp_nav_menu( 
  array( 
    \'walker\'=>new my_extended_walker(),
    \'menu\' => \'mymenu\'
  ) 
);

结束

相关推荐

Mega Menu Walker

我正在尝试创建一个超大菜单漫游器。不幸的是,walkers完全没有掌握我的编码知识。我真的需要一些帮助才能让它工作。以下是我需要的功能:包裹第二层<ul> 在里面<section>. [COMPLETE]</当用户在<li> 在第二级<ul>, 做那个<li> 开始一个新的<ul>. 如果是第一次<li> 在列表中,不要做任何事情,以防止形成空的无序列表。[COMPLETE]</当用户在<li> 在