it-swarm.com.de

Wie erstelle ich archives.php nur für eine Kategorie?

Ich habe eine grundlegende Datei archives.php. Ich habe versucht, nur Posts aus Kategorie 1 anzuzeigen. Wenn ich query_posts ('cat = 1') mache, wird die URL ignoriert und alle Posts in Kategorie 1 werden angezeigt.

Nehmen wir zum Beispiel an, ich habe einen Beitrag in Kategorie 1: Er heißt "Testbeitrag" und ist vom 1. November 2012. Nehmen wir an, ich habe einen weiteren Beitrag in Kategorie 5 vom 2. April 2012.

Mit der aktuellen Datei archives.php (unter Verwendung der Abfrage-Posts für Kat. 1) wird die URL: http://testing.com/2012/04 aufgelöst, um alle Posts in Kategorie 1 anzuzeigen. Nicht gut, da der Post datiert ist November, und die URL wird für April (04) abgefragt.

Die Datei archives.php wird http://testing.com/2012/04 und http://testing.com/2012/11 auflösen, da in jedem dieser Monate ein Beitrag vorhanden ist (wenn auch nicht aus Kategorie 1) wird es jedoch nicht auflösen http://testing.com/2012/09 da dieser Monat keine Posts hat (Kategorie 1 oder anders)

Wie kann ich die Datei archives.php für den aktuellen Monat abfragen (was auch immer in der URL enthalten ist), aber nur Beiträge in Kategorie 1 anzeigen? Auf eine andere Weise gefragt, wie kann ich http://testing.com/2012/04 mit der Meldung "Es tut mir leid, hier gibt es keine Posts" versehen, wie in http://testing.com/2012/09 while http://testing.com/2012/11 zeigt noch den einen Beitrag aus Kategorie 1 an?

1
Kegan Quimby

Erstens:benutze niemals query_posts().

Wenn Sie zweitens eine Indexseitenvorlage für ein Kategoriearchiv für eine bestimmte Kategorie erstellen möchten, lesen Sie den Codex-Eintrag für die Vorlagenhierarchie :

  • category-{slug}.php
  • category-{id}.php
  • category.php
  • archive.php
  • index.php

Wenn Sie also eine Kategorie ('foobar') mit der Kategorie-ID 1 haben, haben Sie folgende Möglichkeiten:

  • category-foobar.php
  • category-1.php

Und WordPress verwendet diese Vorlage, um die Archivindexseite für diese Kategorie zu rendern.

Der Grund, warum Ihre Abfrage angehalten wird, hat jedoch nichts mit Ihrer Vorlagendatei zu tun. Dies liegt daran, dass Sie die Standardabfrage mithilfe von query_posts() vollständig überschreiben.

Verwenden Sie stattdessen pre_get_posts , um Ihre datumsbasierten Archive nach einer bestimmten Kategorie zu filtern:

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' );

Weitere Informationen finden Sie in der WordCamp-Präsentation von Nacin unterSie kennen die Abfrage nicht.

3
Chip Bennett