我如何只为一个类别制作Archives.php?

时间:2012-12-11 作者:Kegan Quimby

我有基本的档案。php文件。我试图让它只显示类别1中的帖子。当我执行query\\u posts(\'cat=1\')时,URL将被忽略,并显示类别1中的所有帖子。

例如,假设我在类别1中有一篇帖子:它叫做“测试帖子”,日期是2012年11月1日。假设我在2012年4月2日的第5类中有另一篇帖子。

使用当前存档。php(使用cat 1的查询帖子)URL:http://testing.com/2012/04 解析为显示类别1中的所有帖子。不好,因为帖子的日期是11月,URL查询的是4月(04)。

档案馆。php将解决http://testing.com/2012/04http://testing.com/2012/11 由于每个月都有一个职位(虽然不是来自第1类),因此它不会解决http://testing.com/2012/09 因为当月没有任何职位(类别1或其他)

我如何制作档案。当前月份的php文件查询(URL中的任何内容),但只显示类别1中的帖子?问另一个问题,我怎样才能http://testing.com/2012/04 想出一条“抱歉,这里没有帖子”的消息,比如http://testing.com/2012/09 虽然http://testing.com/2012/11 是否仍显示类别1中的一篇文章?

1 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

首先:don\'t use query_posts(), 曾经

其次,要为特定类别创建类别存档索引页面模板,请参阅the Codex entry for the Template Hierarchy:

  • category-{slug}.php
  • category-{id}.php
  • category.php
  • archive.php
  • index.php\'foobar\', 类别ID为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演示,You Don\'t Know Query

结束

相关推荐

显示Archives.php中的所有自定义帖子类型

我该怎么做?archive.php 只有以下内容:wp_get_archives(\'type=monthly\'); 以及wp_get_archives() 没有显示所有帖子类型的参数。我也认为archive-[post_type].php 不是我要找的,因为我希望所有帖子类型都显示在一个归档页面中。谢谢W