J'ai écrit un programme personnalisé que j'utilise avec wp_nav_menu
, mais je dois parcourir 4 classes personnalisées et je ne sais pas comment faire. Fondamentalement, chaque élément de menu <li>
doit avoir une classe de color1
, color2
, color3
ou color4
, revenant à color1
, mousser, rincer, répéter, dans cet ordre.
Normalement, je le ferais avec un $i
et un $i++
, mais comment puis-je le faire dans la classe Walker?
EDIT: Mon code de classe Walker:
class Salamander_Advent_Walker extends Walker_page {
function start_el(&$output, $item, $depth, $args) {
if ( $depth ) {
$indent = str_repeat("\t", $depth);
} else {
$indent = '';
}
$advent_thumbnail = get_post_meta($item->ID, 'advent-thumb', true);
$advent_slug = get_post_meta($item->ID, 'advent-slug', true);
$advent_oneliner = get_post_meta($item->ID, 'advent-oneliner', true);
//$description = get_post_meta($item->ID, 'advent-thumb', true);
$output .= $indent . '
<li class="active color4">
<a href="#day'. $advent_slug .'">
<span class="day">
<strong>'. $advent_slug .'</strong>
<span> </span>
</span>
<span class="content">
<small>'. $advent_slug .'</small>
<img src='. $advent_thumbnail .' width="126" height="91" alt="advent" />
<strong>'. $advent_oneliner .'</strong>
</span>
</a>';
}
}
Utilisez une variable de classe pour conserver l'index de la couleur que vous souhaitez afficher. Incrémentez chaque fois qu'il est utilisé et vérifiez s'il est dépassé. Dans ce cas, réglez-le sur 1.
class Salamander_Advent_Walker extends Walker_page {
private $color_idx = 1;
function start_el(&$output, $item, $depth, $args) {
if ( $depth ) {
$indent = str_repeat("\t", $depth);
} else {
$indent = '';
}
$advent_thumbnail = get_post_meta($item->ID, 'advent-thumb', true);
$advent_slug = get_post_meta($item->ID, 'advent-slug', true);
$advent_oneliner = get_post_meta($item->ID, 'advent-oneliner', true);
//$description = get_post_meta($item->ID, 'advent-thumb', true);
$output .= $indent . '
<li class="active color'.$this->color_idx.'">
<a href="#day'. $advent_slug .'">
<span class="day">
<strong>'. $advent_slug .'</strong>
<span> </span>
</span>
<span class="content">
<small>'. $advent_slug .'</small>
<img src='. $advent_thumbnail .' width="126" height="91" alt="advent" />
<strong>'. $advent_oneliner .'</strong>
</span>
</a>';
$this->color_idx++;
if ($this->color_idx > 4) {
$this->color_idx = 1
}
}
}
Créez une fonction séparée:
function alternate()
{
static $i = 0;
$args = func_get_args();
return $args[ $i++ % func_num_args() ];
}
Dans votre marcheur, utilisez-le comme ceci:
$class = 'color' . alternate( 1, 2, 3, 4 );
// somewhere in your output string:
$output .= '<li class="active ' . $class . '">';
Vous pouvez le faire en définissant le nombre incrémentant sur une variable globale.
function start_el(&$output, $item, $depth, $args) {
//globalize the variable
global $ac_color_num;
//check if it is set, or if it is 4 (to reset to 1)
if ( !isset($ac_color_num) || $ac_color_num == 4 ) { $ac_color_num = 1; }
$ac_color_num++
if ( $depth ) {
$indent = str_repeat("\t", $depth);
} else {
$indent = '';
}
$advent_thumbnail = get_post_meta($item->ID, 'advent-thumb', true);
$advent_slug = get_post_meta($item->ID, 'advent-slug', true);
$advent_oneliner = get_post_meta($item->ID, 'advent-oneliner', true);
//$description = get_post_meta($item->ID, 'advent-thumb', true);
//use $ac_color_num in the output.
$output .= $indent . '
<li class="active color' . $ac_color_num . '">
<a href="#day'. $advent_slug .'">
<span class="day">
<strong>'. $advent_slug .'</strong>
<span> </span>
</span>
<span class="content">
<small>'. $advent_slug .'</small>
<img src='. $advent_thumbnail .' width="126" height="91" alt="advent" />
<strong>'. $advent_oneliner .'</strong>
</span>
</a>';
}