基本的なarchives.phpファイルがあります。カテゴリ1の投稿のみを表示するようにしました。query_posts( 'cat = 1')を実行すると、URLは無視され、カテゴリ1のすべての投稿が表示されます。
たとえば、カテゴリ1に1つの投稿があるとします。これは「テスト用投稿」と呼ばれ、2012年11月1日付けのものです。
現在のarchives.php(cat 1のクエリ投稿を使用)では、URL: http://testing.com/2012/04 は表示されるように解決されます。カテゴリー1内のすべての投稿。投稿は11月の日付であり、URLは4月(04)を照会しているため、ダメです。
Archives.phpは http://testing.com/2012/04 と http:// testingを解決します.com/2012/11 それぞれの月に投稿があるので(カテゴリー1からではないにしても)、解決しません http:/ /testing.com/2012/09 その月の投稿はありません(カテゴリ1またはそれ以外)
今月のarchives.phpファイルクエリ(URLに含まれるものは何でも)に対して、カテゴリ1の投稿のみを表示するにはどうすればよいですか。別の言い方をすると、どうやって http://testing.com/2012/04 というメッセージが表示されたら「投稿はありません」と表示される、 http://testing.com/2012/09 のように、 http://testing.com/のように2012/11 はまだカテゴリ1からの1つの投稿を表示しますか?
まず、query_posts()
を使わないでください。
次に、特定のカテゴリのカテゴリアーカイブインデックスページテンプレートを作成するには、 テンプレート階層のCodexエントリ を参照してください。
category-{slug}.php
category-{id}.php
category.php
archive.php
index.php
したがって、カテゴリIDが'foobar'
のカテゴリ1
がある場合は、次のいずれかを実行できます。
category-foobar.php
category-1.php
そしてWordPressはそのテンプレートを使ってそのカテゴリのアーカイブインデックスページをレンダリングします。
ただし、クエリが制限されるのは、テンプレートファイルとは無関係です。 query_posts()
を使ってデフォルトのクエリを完全に上書きしているからです。
特定のカテゴリで日付ベースのアーカイブをフィルタするには、代わりに pre_get_posts
を使用します。
function wpse75668_filter_pre_get_posts( $query ) {
// Only modify the main loop query
// on the front end
if ( $query->is_main_query() && ! is_admin() ) {
// Only modify date-based archives
if ( is_date() ) {
// Only display posts from category ID 1
$query->set( 'cat', '1' );
}
}
}
add_action( 'pre_get_posts', 'wpse75668_filter_pre_get_posts' );
詳細については、NacinのWordCampによるプレゼンテーション不明なクエリを参照してください。