特定のカテゴリを除いた新着投稿一覧を出力する(WP)

mixiのWordPressのコミュニティで、以下のような質問を見かけました。

記事をカテゴリを設定して投稿すると、新着記事にもカテゴリにも掲載されますが、新着記事に掲載されず、かつ、カテゴリには掲載される方法またはプラグインはありませんでしょうか?

この質問に答えてみます。

1.get_posts関数

WordPressのコアに、「get_posts」という関数があります。
この関数は、いろいろな条件を指定して投稿を読み込む関数です。

get_posts関数では、パラメータとして「category=カテゴリのID,カテゴリのID.・・・,カテゴリのID」のように指定すると、IDで指定したカテゴリの投稿だけを読み込むことができます。
また、カテゴリのIDをマイナスにすると、そのカテゴリを除外して投稿を読み込むこともできます。
さらに、投稿を新着順に読み込んだり、読み込む件数を限定したりすることももできます。

例えば、IDが1番のカテゴリ(通常は「未分類」)を除外して、新着の投稿を10件読み込むには、以下のような書き方をします。

$posts = get_posts('category=-1&numberposts=10&orderby=date&order=DESC');

この後、読み込んだ投稿($posts)から1件ずつ投稿を取り出し、setup_postdata関数で初期化した後、the_title等のテンプレートタグで必要な情報を出力します。

なお、カテゴリのIDを調べるには、管理画面でそれぞれのカテゴリの編集をする状態にして、管理画面のURLの最後にある「cat_ID=○○」の部分を見ます。
「○○」がカテゴリのIDを表します。

2.例

WordPressのデフォルトのテーマで、サイドバーに、未分類のカテゴリを除いた新着10件を表示したいとします。
この場合、サイドバーのテンプレート(sidebar.php)に、以下の部分を追加します。

<li>
    <h2>新着の投稿</h2>
    <ul>
        <?php
            $posts = get_posts('category=-1&numberposts=10&orderby=date&order=DESC');
            foreach ($posts as $post) : setup_postdata($post);
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endforeach; ?>
    </ul>
</li>

5行目で、get_posts関数を使って、未分類カテゴリを除いた新着の投稿を10件読み込み、$postsに代入します。
6行目のforeach文で、$postsから投稿を1件ずつ取り出しながら、繰り返しを行うようにします。
そして、8行目で、the_titleタグで投稿のタイトルを出力します。また、the_permalinkタグで、タイトルの部分をその投稿へのリンクにします。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください