web-dev-qa-db-ja.com

条件付きでstart_lvl()関数に属性を追加する方法

親要素のIDを子要素のコンテナdivに追加したいです。どうやってやるの?これが私のコードです:

<?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";
  }
2
pershianix

これを行うために必要なデータがstart_lvl()メソッドにありません。そのデータは$item変数のstart_el()メソッドで利用できるので、そのデータを渡す方法を作り上げる必要があります。

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'
  ) 
);
1
s_ha_dum