私はwp_nav_menu
で使用しているカスタムウォーカーを書きましたが、4つのカスタムクラスを反復処理する必要があります。その方法がわからないのです。基本的に、各メニュー項目<li>
には、color1
、color2
、color3
またはcolor4
のクラスを与えて、color1
に戻って、泡立て、すすぎ、繰り返しの順にする必要があります。
通常、これを$i
および$i++
を使って行いますが、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>';
}
}
表示したい色の「インデックス」を保持するためにクラス変数を使用します。使用するたびにインクリメントし、それが終わったかどうかを確認します。その場合は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
}
}
}
別の関数を作成してください。
function alternate()
{
static $i = 0;
$args = func_get_args();
return $args[ $i++ % func_num_args() ];
}
あなたの歩行者ではこれを次のように使ってください。
$class = 'color' . alternate( 1, 2, 3, 4 );
// somewhere in your output string:
$output .= '<li class="active ' . $class . '">';
これを行うには、増分値をグローバル変数に設定します。
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>';
}