カテゴリータグの投稿

2009-09-27
晴れ

カテゴリー別新着記事を見せる

ゆりこ による 03:49:40 の投稿
カテゴリー: WordPressハック,更新履歴
タグ: ,
カテゴリー別新着記事は /arc/ で見られます

カテゴリー別新着記事は /arc/ で見られます

先日から、http://www.yuriko.net/arc/ の URL で「カテゴリー別新着」が見られるようにしました。この URL は、手書き HTML/自作ウェブログツールの時代では「最近 NN 日分」の記事を見せていたのですが、WordPress に変更してからは Not Found となっていました。Google ウェブマスターツールを利用するようになって、サイト内のリンク切れがつぶさに確認できるようになりましたが、このとき、/arc/ へのリンク切れが結構多いことに気がつきました。これではいかんということで対応したものです。

そもそも、当サイトの URL 体系が /YYYY/MM/DD/ じゃなくて /arc/YYYY/MM/DD/ とかにしたのは、サイトを構築するツールの変更を容易に行えるように準備したものです。/ 直下に YYYY を切る方が明らかに美しいですが、ツールの都合によってサブディレクトリーの下でないと設置しにくい場合に困ると考えたのです。結局、WordPress だと / 直下に入れることが容易だったため、この準備は冗長になっています。

今回はいろいろ試行錯誤しましたが、最終的には次の手法で落ち着きました。

  1. カテゴリー別新着用のページテンプレートを作ります。ページテンプレートには以下のようなコードを入れます。get_categories() の引数ですが、サイドバーのカテゴリー一覧と同じ指定 (投稿数の降順) です。
    <div class="post hentry">
    <h3>カテゴリー別新着</h3>
    <p>
    <?php
    $categories = get_categories('orderby=count&order=desc');
    if (count($categories)) { ?>
    <dl>
    <?php foreach ($categories as $c) {
        query_posts('cat=' . intval($c->term_id) 
        . '&posts_per_page=1&orderby=date&order=DESC');
        if (have_posts()) {
          the_post();
          printf('<dt>%1$s</dt><dd>' .  
          . '<a href="%2$s">%3$s</a> (%4$s)</dd>' . "\n", 
          wp_specialchars($c->name), get_permalink(), 
          get_the_title(), get_the_time('Y-m-d H:i:s'));
        }
      } ?>
    </dl>
    <?php } ?>
    </p></div>
  2. 固定ページを1つ作り、ページスラッグを「arc」とします。パーマリンク体系である「/arc/%year%/%monthnum%/%date%/%postname%/」と重複するような気がしますが、WordPress は投稿かページかをきちんと区別してくれて、/arc/2009/ ならば投稿 (の年別アーカイブ)、/arc/ ならば固定ページとして処理してくれます。

この手法は、パーマリンク体系が「/archives/%post_id%/」の場合にも応用できますね。この場合「/archives/」という URL になるような固定ページを作ればいいのです。パーマリンク体系が、ごく普通の「/%year%/%monthnum%/%date%/%postname%/」だったら、カテゴリー新着用には「/category/」という URL が適切でしょうか。