WordPress foreachで最初を取得する

2016年05月24日

WordPress、なかなか難しいです。

やりたいこと
Bootstrapの切り替えられるタブをカスタム投稿タイプのタクソノミーで実現したい

tab1_3

Bootstrapのリファレンス、JavaScriptにあるTabのコード
tab2_3
上記の例では、「home」、「profile」、「messages」、「settings」がタクソノミーに該当する
最初の「home」の li に class="active" を付けたい

[php]
$args=array(
'taxonomy’ => 'hoge-category’,
'orderby’ => 'ID’,
'order’ => 'ASC’,
);
$categories=get_categories($args);
foreach($categories as $category):
echo '<li role="presentation"><a href="#’.$category->slug.’" aria-controls="’.$category->slug.’" role="tab" data-toggle="tab">’. $category->name .'</a></li>’;
endforeach;
[/php]
タクソノミーの出力は上記のコードで出来たが、最初とその他の振り分けが出来ない。

検索して見つかるのは大体以下のようなもの
[php]
$array = array(1, 2, 3, 4, 5);
foreach ($array as $value) {
if ($value === reset($array)) {
// 最初
} else {
// その他
}
}
[/php]
この場合、配列の対象と変数が指定されているため、変動があった場合に修正が必要になるし、上記のコードとどう組み合わせてよいのかも分からない。

色々検索してみたがなかなか解決する手段が見つからない。
もう駄目かなと思いはじめていたそんな時、フォーラムの「foreach構文内で分岐は可能なのでしょうか?」というトピックが目に留まる。
https://ja.forums.wordpress.org/topic/11303

その中に
[php]
if($posts) {
foreach($posts as $key=>$post) {
echo $key;
if($key !== 0){echo '最初じゃないよ’;}
setup_postdata($post);
echo '<li><a href="’ . get_permalink() . '">’ . get_the_title() . '</a></li>’;
}
}
[/php]
というコードが提示してあり、「$key」が使えるのでは?と思いつく。
[php]
foreach($categories as $key => $category):
[/php]
として、
[php]
if ($key == 0) {
echo '<li role="presentation" class="active"><a href="#’.$category->slug.’" aria-controls="’.$category->slug.’" role="tab" data-toggle="tab">’. $category->name .'</a></li>’;
} else {
echo '<li role="presentation"><a href="#’.$category->slug.’" aria-controls="’.$category->slug.’" role="tab" data-toggle="tab">’. $category->name .'</a></li>’;
}
[/php]
と書き換えてみたところ、なんとか出来ました。

と、思ったら、リファレンスに簡単な方法がちゃんと書いてありました。
[code lang="js"]
$('#myTab a:first’).tab('show’)
[/code]
をJavaScriptに入れるだけで、 「class="active"」の代わりになるようで、最初とその他を振り分けなくても、タブの切り替えができました。

多分、もっと簡単にできる方法があるのだとは思いますが、自分では今の所、これが精一杯。時間はかかったけど、いい勉強になりました。

WordPressWordPress

Posted by toto