J'ai le menu suivant dans mon en-tête:
<?php
$args = array(
'menu' => 'Main Menu',
'container' => false,
'depth' => 1,
'items_wrap' => '%3$s',
'walker' => new Bar_List_Walker_Nav_Menu
);
wp_nav_menu($args);
?>
et je veux que la sortie ressemble à ceci:
link1 | link2 | link3 | link4 | link5
Alors je me suis mis à faire une fonction de marcheur, voici où je suis arrivé à:
class Bar_List_Walker_Nav_Menu extends Walker_Nav_Menu {
public $count;
function start_lvl(&$output, $depth) {}
function end_lvl(&$output, $depth) {}
function start_el(&$output, $item, $depth, $args) {
$attributes = ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$item_output .= '<a'. $attributes .'>';
$item_output .= apply_filters( 'the_title', $item->title, $item->ID );
$item_output .= '</a>';
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
}
function end_el(&$output, $item, $depth) {
static $count;
$count++;
if(!$this->count >= $count) {
$output .= " | ";
}
}
function walk( $elements, $max_depth ) {
$this->count = count($elements);
parent::walk( $elements, $max_depth );
}
}
Cela génère l'erreur suivante:
Warning: Missing argument 4 for Bar_List_Walker_Nav_Menu::start_el() in C:\xampp\DEV\Stace\trunk\wp-content\themes\philosophy\functions.php on line 100
Si je supprime la fonction walk()
de ma classe de marcheur, tout fonctionne correctement, sauf que le décompte n’est plus saisi et qu’il en résulte qu’un |
de trop est ajouté à la fin de ma navigation.
Quelqu'un peut-il travailler le code pour obtenir ma sortie désirée?
Vous pouvez utiliser l'ordre du menu à l'intérieur de l'élément pour voir si ce n'est pas le premier. Si ce n'est pas le cas, dessinez le caractère avant l'ancre.
class Bar_List_Walker_Nav_Menu extends Walker_Nav_Menu {
private $separator = " | ";
function start_el(&$output, $item, $depth, $args) {
if($item->menu_order > 1){
$output .= $this->separator;
}
$attributes = ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$output .= '<a'. $attributes .'>';
$output .= apply_filters( 'the_title', $item->title, $item->ID );
$output .= '</a>';
}
}
Après quelques discussions sur le chat:
class Bar_List_Walker_Nav_Menu extends Walker_Nav_Menu {
public $count;
function start_el(&$output, $item, $depth, $args) {
$attributes = ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';
$output .= '<a'. $attributes .'>';
$output .= apply_filters( 'the_title', $item->title, $item->ID );
$output .= '</a>';
}
function end_el(&$output, $item, $depth) {
static $count;
$count++;
if($this->count > $count)
$output .= " | ";
}
function walk( $elements, $max_depth, $r ) {
$this->count = count($elements);
return parent::walk( $elements, $max_depth, $r );
}
}