wordpress カテゴリーページの先頭に、カテゴリーの紹介記事を表示する方法
wordpressのカテゴリーページで、記事の並ぶ先頭に、そのカテゴリーを紹介する記事を持ってくるよう、テンプレートをカスタマイズしたのでメモ。
やりたかったのは、
カテゴリー紹介記事 |
カテゴリー記事1 |
カテゴリー記事2 |
みたいなこと。
作家紹介 |
作品1 |
作品2 |
みたいな。
できたのはこんな画面。
同カテゴリーに紹介記事を作って、新しい順に並べて一番上に来るようにするのが一番楽なんだけど、それだと芸がないので試行錯誤してみた。
ざっくり言うと、カテゴリースラッグと記事のスラッグを同じにして、カテゴリーテンプレートで同名スラッグの記事を頭に表示させ、その後普通にカテゴリーに所属する記事を並べる、というテンプレートを作った。以下詳細。
記事の構成
カテゴリーのスラッグと、そのカテゴリーを紹介する記事のスラッグを同じ名前にする。
例)
- カテゴリースラッグ:nyankot
- 記事のスラッグ:nyankot
テンプレ
category.phpをいじる。
記事表示部分を、こんな感じにする。
<?php $cat_id=get_query_var('cat'); $cat=get_category($cat_id); $my_query = new WP_Query('name=' . $cat->category_nicename ); ?> <?php while ($my_query->have_posts()) : $my_query->the_post();include (TEMPLATEPATH . '/short-post-template.php'); ?> <?php endwhile; ?> <?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post();include (TEMPLATEPATH . '/short-post-template.php'); ?> <?php endwhile; ?>
記事表示部分で読み込んでる short-post-template.php は、各記事の抜粋版表示用テンプレ。今回はあんまり関係ないから気にしないでいい。
ソース解説
カテゴリースラッグを取得する
カテゴリーのIDを取得
get_query_var('cat')
get_the_category()はダメだった。ループの外だからか。
そのカテゴリーIDをベースに、カテゴリー情報を $cat に取得する。
$cat=get_category($cat_id);
カテゴリー情報からスラッグを抽出
$cat->category_nicename
これを次のクエリーに使う
複数ループを使う
頭のカテゴリー紹介記事と、その後ろのカテゴリーに所属する記事は、別なループで表示する。
後のループが本来のクエリーで実施されるループなので、頭のループは新しくクエリーを作ってやる。
$my_query = new WP_Query('name=' . $cat->category_nicename );
上で取得したカテゴリーのスラッグを、新しいクエリーで表示する記事のスラッグとして設定する。
そのクエリーを使って記事の表示
<?php while ($my_query->have_posts()) : $my_query->the_post();include (TEMPLATEPATH . '/short-post-template.php'); ?> <?php endwhile; ?>
ループをリセット
<?php rewind_posts(); ?>
本来のクエリーで記事を表示
<?php while ( have_posts() ) : the_post();include (TEMPLATEPATH . '/short-post-template.php'); ?> <?php endwhile; ?>
参考
http://ja.forums.wordpress.org/topic/377
http://tech.ludicmind.net/2008/06/wordpress-1.html
蛇足ですが、記事の抜粋に画像を入れるのはこれを参考にしてやった。
http://takamorry.com/article/20090118thumb.html