query_postsを使うと/page/の表示が思わぬことになった

当サイトはWordPressで構築していたりするのですが、最新の投稿に一部カテゴリーの投稿が表示されない小細工を弄していたりしました。

恥ずかしいbefore

小細工というのは、index.phpに下記を追記するだけの簡単なものでした。

if (is_home()) {
 query_posts("cat=-/*ここにカテゴリーIDを入れる*/");
}

しかし!ここ連日で投稿を行ってきたせいか、当サイトフロントページの下部にページ送り表示があり、しかもこのページ送りが『URLに”/page/~”と付随するのに、表示される投稿は必ず最新の投稿数件になる。』なんていう恥ずかしい事態になっていたことに昨日気づきました。

納得のafter

数件、WordPressのphpに詳しいサイトを回ったところ、WORDPRESSCodex日本語版に行き着き、しかもサンプルコードがほぼ求めていたものでした!それがこちら。

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-1,-1347' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );

もちろん、カテゴリ別表示にも対応しています。
よかったよかった!