web-dev-qa-db-fra.com

Incrémenter une classe dans un marcheur personnalisé

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>&nbsp;</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>';                      
}

}

3
Amanda

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>&nbsp;</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
        }
    }

}
1
sirlark

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 . '">';
3
fuxia

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>&nbsp;</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>';                      
}
1
Drew Gourley