XREA-ad

2009/5/16 土曜日 16:01:49 [WEB]

WordPressのアーカイブを降順にしたい

ブログで最近の記事が新着順に表示されるのは分かるんですが、 「○年○月の記事一覧」みたいなアーカイブを見ようとした場合にも新着順で表示されると何か違和感があります。 やっぱり過去の記事は書かれた順に並んでいる方が見やすくないですか?

しかし、WordPressも例に違わず新着順で表示してくれて、どうやら逆順にする設定も存在しないように見える。 書かれた順に記事を読みたいと思うのは俺くらいなのかなあと思いつつ、それでもテンプレートに手を加えてみました。

改造する方法としては、まずarchive.phpのThe Loopと呼ばれる部分を探します。 archive.phpが存在しないテンプレートの場合はindex.phpの方を見てください。

<?php while (have_posts()) : the_post(); ?>
	<!-- 記事を表示する処理 -->
<?php endwhile; ?>

テンプレートには大体こんな感じで記事を表示する部分が含まれていると思います。 これの直前に記事の並びを逆順にする要求を付け加えます。

<?php if(is_date()) : query_posts($query_string.'&order=ASC'); endif ?>
<?php while (have_posts()) : the_post(); ?>
	<!-- 記事を表示する処理 -->
<?php endwhile; ?>

WordPressはクエリと呼ばれる「取得する記事の条件を表す文字列」にしたがって記事を表示しています。 現在のクエリは$query_stringで参照できるので、そこに逆順の条件order=ASCを付け加えたのち、 query_posts()でクエリを更新しています。

直前のif文の条件式is_date()は、表示中のページが日付別のアーカイブであるかどうかを判別してくれます。 過去の記事=アーカイブだぜ! な認識でここをis_archive()にしたら、カテゴリ別の表示やその他諸々まで古い順で表示されてしまった。

ちなみに、本当はThe Loopの後でwp_reset_query()を呼び出した方がいいらしいんですが、 WordPressのバージョンが古いせいか使えないようでした。とりあえず動いているのでよしとしよう。