記事一覧(アーカイブ)で特定のカテゴリーだけ並び順(昇順・降順)を変える条件分岐指定方 [wordpress]

13030601

wordpressで書いた記事は、アーカイブ(記事一覧)では新しい順(降順)に並びます。
でも 中には小説を書いて古い順に並べたいとか、マニュアルを1から順番でとかという場合もあるでしょう。

wordpressには「query_posts」という条件を指定できるタグがあります。
これをループの前に付け加えることで、いろいろな条件の指定ができます。
query_postsで出来る指定はいろいろありますが、他の使い方は機会があればまとめます。

今回は、この昇降順の変更と、特定のカテゴリーのみに指定する条件分岐についてです。

古い順に並べてみる

アーカイブ:arcive.phpというファイルが記事一覧のテンプレートになります。
これが無い場合はindex.phpを見てください。wordpressのTwenty ten~のテーマではloopの中をいじらなくてはならないので、慣れていない人は厄介です。
まず、archive.phpの中を覗いてみると

<?php if(have_posts()): while(have_posts()): the_post(); ?>

という表示があると思います。
その上に下記の記述を入れます。

<?php query_posts($query_string .'&order=asc'); ?>

これだけです。 これで記事一覧は古い順になります。acsというのが昇順です。
使う事はないでしょうが、descが降順となります。

でもさ、全部カテゴリーが降順になったら不便!
特定のカテゴリーだけ順番を降順にしたいんだ!
というあなた。 それには条件分岐タグを入れます。

特定のカテゴリーだけ条件分岐を使って古い順に並べてみる

条件分岐タグを入れ、その中で指定してあげます。
これを使うことで、細かくカテゴリー別にいろいろな条件での指定が出来るようになります。

条件分岐の基本

例えばカテゴリーIDが10のページにだけ~という指定

<?php if(is_category('10')): ?>// <?php ifが開始です
カテゴリー10だけにこの文章が見えます
<?php endif; ?>// <?php endif; ?>で終わります。

なので、今回のブログ件名にある、特定のカテゴリー(下記の例はID10)だけ昇降順を変えたい場合は下記のようになります。

<?php if(is_category('10')): ?>
<?php query_posts($query_string .'&order=asc'); ?>
<?php endif; ?>
条件分岐のは無制限に出来る

条件分岐はいくつでも増やす事ができます。また、カテゴリーIDやページID以外に、スラッグで設定することも可能です。
条件2~は同じタグになりますのでコピペで増やしていけばOKです。

<?php if(is_category('10')): ?>// 条件1 カテゴリーID10 のアーカイブが表示されているとき
カテゴリー10だけにこの文章が見えます。
<?php elseif(is_category('news')): ?>// 条件2 カテゴリースラッグnewsのアーカイブが表示されているとき
カテゴリースラッグ"news"だけにこの文章が見えます。
<?php elseif(is_category(array(10,'news','blog')): ?>// 条件3 複数で設定する場合:カテゴリーID10とnews,blogのアーカイブが表示されているとき
カテゴリースラッグ"blog"だけにこの文章が見えます。
<?php endif; ?>// 条件設定終了

一定の条件を設定し、それ以外は、この設定という場合。

<?php if(is_category('10')): ?>// 条件1
カテゴリー10だけにこの文章が見えます。
<?php elseif(is_category('news')): ?>// 条件2
カテゴリースラッグ"news"だけにこの文章が見えます。
<?php elseif(is_category('blog')): ?>// 条件3
カテゴリースラッグ"blog"だけにこの文章が見えます。
<?php else: ?>// 未分類のカテゴリー
上記で指定したカテゴリー以外にはこの文章が見えます
<?php endif; ?>// 条件設定終了
条件分岐指定はアーカイブ・ページ・記事なんでもOK

条件分岐はアーカイブならis_category() というぐあいに条件を変えることで、固定ページや記事テンプレートで使用することが可能です。

is_home() 
// トップページ(正確に言うとindex.phpやhome.php)
is_page()  
// 固定ページ カッコ内にIDかスラッグを入れる 例if(is_page('10') 
is_single()  
// 単一記事ページ カッコ内にIDかスラッグを入れる 例if(is_singe('10') 
is_category()  
// アーカイブページ カッコ内にIDかスラッグを入れる 例if(is_category('10') 
in_category()  
// 指定したカテゴリーの単一記事 カッコ内にIDかスラッグを入れる 例if(in_category('10') 
条件分岐のリセット

一つページで複数の箇所で条件分岐を入れている場合、
うまく作動しない場合があります。例えばheader.phpとarchive.phpの両方に条件分岐がされている場合、
後に読み込まれたテンプレート方は作動しません。
これはheader.phpで指定した条件分岐の条件が生きたままだからです。
なので、複数のテンプレートに条件分岐を入れる時は、wp_reset_query()を入れる事でリセット処理が行われ、次に読み込まれる条件分岐も正常に機能するようになります。
基本的にはこのリセット処理は常につけておけば問題ないってことですな。今さらジロー。

<?php endif; wp_reset_query(); ?>

他にも条件分岐の種類はあります。
→ もっとくわしく見たいかたは公式で

may the force be with you