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