web-dev-qa-db-fra.com

comment ajouter conditionnellement des attributs à la fonction start_lvl ()?

Je veux ajouter l'id de l'élément parent dans un conteneur div d'éléments enfants. Comment puis je faire ça? Voici mon code:

<?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

Vous ne disposez pas des données nécessaires dans la méthode start_lvl() pour le faire. Ces données sont disponibles dans la méthode start_el() dans la variable $item. Vous devrez donc trouver un moyen de les transmettre:

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