サイトのトップページなどで良くある新着情報などをカテゴリ毎に表示させる方法。
jQuery UIと連動してタブ表示、なんてこともできますよ。
元ネタはフォーラムにありますのでそちらを参照に
「カテゴリごとの記事の一覧をトップページに羅列したい」
http://ja.forums.wordpress.org/topic/3160?replies=5
<?php
// まずはカテゴリーを取得(カスタムタクソノミーでもOK)
$catargs = array(
'taxonomy' => 'category'
);
$catlists = get_categories( $catargs );
foreach($catlists as $cat) : // 取得したカテゴリの配列でループを回す
$args = array(
'cat' => $cat->term_id
);
$my_posts = get_posts( $args );
global $post; // テンプレートファイル内なら書かなくても良い
if ( $my_posts ) { // 該当する投稿があったら
foreach ( $my_posts as $post ) :
setup_postdata( $post );
/* the_title(), the_permalink() 等使用可
マークアップはお好みで
*/
endforeach; // 投稿のループ終わり
} else {
// 投稿がなかった場合
}
wp_reset_postdata();
endforeach; // カテゴリのループ終わり
?>
カスタムタクソノミーで行うのならば4行目を
'taxonomy' => 'タクソノミー名'
とし、9行目を
'タクソノミー名' => $cat->slug
とします。
その他の引数はCodexを見てどうぞ。
ちょっと応用
jQueryUI のTabsと連動してみます。
事前に関連の.jsや.cssファイルは読み込んでおいてください。
<?php
echo '<div id="tabs">';
$catargs = array(
'taxonomy' => 'category'
);
$catlists = get_categories( $catargs );
// タブ部分
echo "<ul>";
foreach( $catlists as $category ) {
echo '<li><a href="#cat-' . $category->slug . '" class="cat-' . $category->slug . '">' . $category->name . '</a></li>';
}
echo "</ul>";
// カテゴリーごとの投稿を表示
foreach( $catlists as $cat ) :
echo '<div id="cat-' . $cat->slug . '">';
$my_posts = get_posts( 'cat=' . $cat->term_id );
if ( $my_posts ) { // 該当する投稿があったら
echo "<ul>";
foreach ( $my_posts as $post ) :
setup_postdata( $post );
echo "<li>";
the_title();
echo "</li>";
endforeach; // 投稿のループ終わり
echo "</ul>";
}
wp_reset_postdata();
echo '<div><a href="/" . get_category_link( $cat->term_id ) . '">' . $cat->name . '一覧 >></a></div>';
echo '</div>';
endforeach;
echo "</div>"
?>
要はタブになっている部分の a のアンカー(#tabs-1)と、タブの内容を囲んでいるdivのid(tabs-1)が一致すればいいので、当該部分を $cat->term_id とかにしてもOKです。